Use Guava caches and add a config option for caching metadata