Batch partition loading from the metastore

OK here is the initial implementation that does batching based on time (a new parameter ``hive.metastore-partition-load-batch-interval`` is introduced) to address #1981 . Currently each hive-metastore thread does batching independently (instead of using locking and letting one thread do the batching as the same ``BackgroundCacheLoader`` is shared by all metastore threads). For keeping the state this implementation uses thread local variables to get rid of synchronization & make the code more concise. Once the code is ready to merge I will update the docs with the new parameter.
@martint The thing is ``reload()`` has to return a ``ListenableFuture<V>``, so even if we batch the calls with a single ``loadAll()`` call we can't really return multiple values from this function. Also we can't update the cache here as we need a reference to the cache (which is partially constructed when constructing the ``BackgroundCacheLoader`` and can't be sure that may cause a problem). Do you think it's safe to have a reference to the cache itself?