[metal] Initial bring up of Metal CodeGen (3/n) (#3158)

This is another step to enable Metal support for IREE. This commit
starts the support for Metal shader code generation. The basic
idea is to reuse the SPIR-V code generation path and cross compile
SPIR-V into Metal Shading Language source code. The MSL source code
can then be converted into a MTLLibrary or directly consumed by
Metal runtime.

This commit registers a new Metal-SPIRV compiler target backend
and a new executable flatbuffer schema for encoding the generated
Metal shader source/library. Most of the changes are threading
various components up, including pulling in SPIRV-Cross and wrapping
it up for SPIR-V to MSL conversion.
diff --git a/.gitmodules b/.gitmodules
index 3bde2de..0dfd5cd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -53,3 +53,6 @@
 [submodule "third_party/flatcc"]
 	path = third_party/flatcc
 	url = https://github.com/dvidelabs/flatcc.git
+[submodule "third_party/spirv_cross"]
+	path = third_party/spirv_cross
+	url = https://github.com/KhronosGroup/SPIRV-Cross.git