dispatch: allow saving/loading the entire pl_dispatch cache state
We sort of hackily recreate the concept of a program cache containing a
cache for multiple shaders, because of the way the pl_pass
program
cache works.
In theory this is somewhat redundant with the existing concept of e.g. a VkShaderModule, but we do things this way because it allows us to also save other resources related to programs, for example the cached SPIR-V (and also allows us to work with APIs that only cache programs on a per-program basis)
We also expose this to the pl_renderer
API.
Closes #99 (closed)