Metal: Store MSL in shared pointers to immutable strings The translated metal shader source is quite large and we store copies in both ProgramMtl and mtl::LibraryCache. Instead, store the source in shared_ptrs to immutable strings. This has a nice side effect of simplifying the cache keys for mtl::Library cache and avoiding string copies. This saves about 4% GPU process memory. Since these strings are rarely accessed, the overhead of shared_ptr is not a concern. Bug: chromium:1329376 Change-Id: I507529ff1e25cc6aafead272fc9bb6ab0b8dbe88 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4614361 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>