General Caching Query Runners cleanup (40% query time reduction for HLL)

* Add type strictness to CachingClusteredClient.
* Add background caching to CachingClusteredClient. Gives between 0% and 5% query speed increase.
* Add an abstract caching query runner class
* Add caching to CachingQueryRunner. Gives up to a WHOPPING 40% reduction in query time on HLL queries
finishedSegments doesn't appear to be really used right now, can we remove this?