RFC: Add an LLVM CAS library and experiment with fine-grained caching for builds

Hi, bringing back this RFC because we are ready to start upstreaming our implementation. If you want our experimental branch, we made lots of progresses and we are reasonably happy with the current implementation. Some of the preparation for the CAS work that also benefits other work have been upstreamed (like BLAKE3) or being upstreamed (like VirtualOutput ⚙ D133504 Support: Add vfs::OutputBackend and OutputFile to virtualize compiler outputs). Following that, we will start to upstream CAS related work and then add caching support to clang.

First of all, our CAS implementation has two components: an ObjectStore and an ActionCache. ObjectStore is a CAS storage for all the data and ActionCache is a key-value storage that can be used to lookup result of a certain computation. With some experiments, I think we have a design that can accommodate different kinds of CAS implementation and achieve reasonable good performance. We have prototyped InMemoryCAS, OnDiskCAS and RemoteCAS in the current design and I will start by upstreaming the ObjectStore API together with InMemoryCAS implementation.

Please let me know if you want to help review the changes and/or have plans/concerns about other CAS integration.