[Flutter GPU] Runtime shader import. (#48875)

* Add `--shader-bundle` mode to impellerc that takes a simple JSON spec and produces a single flatbuffer with a pack of named shaders.
* Added "single invocation" mode to the impellerc GN templates.
* Record vertex attribute reflection information.
* Light refactoring of the compiler frontend to make compiler invocations easier to follow.

Example shader bundle spec (json form of the yaml spec as shown in the [Flutter GPU](https://docs.google.com/document/d/1Sh1BAC5c_kkuMVreo7ymBzPoMzb7lamZRPsI7GBXv5M/edit?resourcekey=0-5w8u2V-LS41tCHeoE8bDTQ#heading=h.a3gmnzue7wgq) doc):
```json
{
    "UnlitFragment": {
        "type": "fragment",
        "file": "shaders/flutter_gpu_unlit.frag"
    },
    "UnlitVertex": {
        "type": "vertex",
        "file": "shaders/flutter_gpu_unlit.vert"
    },
    "TextureFragment": {
        "type": "fragment",
        "file": "shaders/flutter_gpu_texture.frag"
    },
    "TextureVertex": {
        "type": "vertex",
        "file": "shaders/flutter_gpu_texture.vert"
    }
}
```

Example impellerc invocation:
```bash
impellerc \
  --include=~/projects/flutter/engine/src/flutter/impeller/compiler/shader_lib \
  --runtime-stage-metal \
  --sl=assets/TestLibrary.shaderbundle \
  --shader-bundle='{"UnlitFragment": {"type": "fragment", "file": "shaders/flutter_gpu_unlit.frag"}, "UnlitVertex": {"type": "vertex", "file": "shaders/flutter_gpu_unlit.vert"}, "TextureFragment": {"type": "fragment", "file": "shaders/flutter_gpu_texture.frag"}, "TextureVertex": {"type": "vertex", "file": "shaders/flutter_gpu_texture.vert"}}'
```

Runtime usage:
```dart
    /// Add a render pass encoder to the command buffer so that we can start
    /// encoding commands.
    final encoder = commandBuffer.createRenderPass(renderTarget);

    /// Load a shader bundle asset.
    final library =
        gpu.ShaderLibrary.fromAsset('assets/TestLibrary.shaderbundle')!;

    /// Create a RenderPipeline using shaders from the asset.
    final vertex = library['TextureVertex']!;
    final fragment = library['TextureFragment']!;
    final pipeline = gpu.gpuContext.createRenderPipeline(vertex, fragment);

    encoder.bindPipeline(pipeline);
```

https://github.com/flutter/engine/assets/919017/6f3e9a59-d180-4ba6-b14c-fa6d7056965c
https://dart.googlesource.com/external/github.com/flutter/engine/+/a14171213eda8c272858702764041495972a69bd
diff --git a/DEPS b/DEPS
index 3531bd7..9f49546 100644
--- a/DEPS
+++ b/DEPS
@@ -275,7 +275,7 @@
 deps = {
   'engine/src': 'https://github.com/flutter/buildroot.git' + '@' + '0141e94b34cbd3db77f28796587334857fa985da',
 
-  'engine/src/flutter': Var('flutter_git') + '/mirrors/engine' + '@' + '45b95f264d63845d429ffbda69eab0a61a1af451',
+  'engine/src/flutter': Var('flutter_git') + '/mirrors/engine' + '@' + 'a14171213eda8c272858702764041495972a69bd',
 
   'engine/src/third_party/dart': Var('dart_git') + '/sdk' + '@' + '55bd60be32f1ee59c01b1663d798d4356ace5f47',
 
diff --git a/commits.json b/commits.json
index c544212..2ef27bf 100644
--- a/commits.json
+++ b/commits.json
@@ -1,5 +1,5 @@
 {
-  "engine/src/flutter":"45b95f264d63845d429ffbda69eab0a61a1af451",
+  "engine/src/flutter":"a14171213eda8c272858702764041495972a69bd",
   "engine/src/third_party/dart":"55bd60be32f1ee59c01b1663d798d4356ace5f47",
   "flutter":"1ff768633a863d7f6b6d0a7f585f6aa7c399df43"
 }
\ No newline at end of file