Vulkan: Implement basic uniform shader parsing.

This is a first step at implementing uniforms with descriptor sets.
It does not actually bind uniforms and upload data, but it does
implement uniform shader parsing. Uniforms are gathered into a single
uniform block which is bound to set 0, with binding 0 for vertex
uniforms and binding 1 for fragment uniforms.

Also adds a ReplaceSubstring helper to string_utils.

Also removes the precision writing from OutputVulkanGLSL since this
was generating warnings with glslang.

BUG=angleproject:2167

Change-Id: I9ec8351ec1973e583100f99292b0080ee968067b
Reviewed-on: https://chromium-review.googlesource.com/699938
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/common/string_utils.h b/src/common/string_utils.h
index 83e01ea..4437fb3 100644
--- a/src/common/string_utils.h
+++ b/src/common/string_utils.h
@@ -65,6 +65,12 @@
 
 // Convert to lower-case.
 void ToLower(std::string *str);
-}
+
+// Replaces the substring 'substring' in 'str' with 'replacement'. Returns true if successful.
+bool ReplaceSubstring(std::string *str,
+                      const std::string &substring,
+                      const std::string &replacement);
+
+}  // namespace angle
 
 #endif // LIBANGLE_STRING_UTILS_H_