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

* Add type strictness to CachingClusteredClient.
* Add ability to get an ordered list of servers that can service a segment.
* Add background caching to CachingClusteredClient. Gives between 0% and 5% query speed increase.
* Add "waitForCache" as a query-context keyword for CachingClusteredClient. This keyword is useful for any query that will VERY quickly look for cached values (like unit tests). If it would ever need to be used in an actual cluster that would mean we had a hella fast cluster.
* Add an abstract caching query runner class
* Add caching to CachingQueryRunner. Gives up to a WHOPPING 40% reduction in query time on HLL queries
* Add BaseQuery.BasicContext which contains many of the commonly used context settings for queries.
this needs to be configurable