Cache precompiled MSL shaders.

Acts similarly to the GL precompiled shaders, in that it will cache
preliminary data (in this case, the MTLLibraries) in the PipelineState
cache, and then when the pipeline is built will extract that. Once
the pipeline is built the MTLLibraries are discarded.

Bug: skia:11392
Change-Id: I701e2e857d105c9149a2f69fe7b60bf4599195bc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/380457
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
7 files changed