support caching using a user-supplied guava CacheBuilder
added factory methods for caching clients

with tests!