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.
I have a similar implementation that I am testing now that uses ``SettableFuture``s. The ``reload()`` call returns a ``SettableFuture`` for every key and keeps the futures in a map, then those futures' values are set in batch after the batch call is completed.