implement keepclient API on top of block cache with pluggable backend
- define keep-gateway API
- implement keep-gateway API by reading from entries in block cache from #20318
- if a block isn't present in the cache, get it from the configured backend
- also implement keep-gateway API using HTTP client to keepstore (existing keepclient functionality)
- we end up with two new components, the caching component and the HTTP client component (both implementing the keep-gateway API), the existing keepclient class is reimplemented in terms of these new components (the caching component wrapping the http client component).