Rewrite caches to use ListenableFuture

This permits the cache implementation to implement batching of
lookups by queuing up Futures that it creates and returns then
completing all of the queued future instances when one of them
gets triggered to resolve.

Change-Id: Ide4f011a11cb069caf8cc3bc4d9dd615ad6e954a
Signed-off-by: Shawn O. Pearce <sop@google.com>
100 files changed