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.
Ok, what we need to do is something like this (pseudo-code follows):

```
ListenableFuture<V> reload(K key, V oldValue)
{
   batch.add(key);
   ListenableFuture<Map<K, V>> future = batch.getFuture();

   return Futures.transform(future, new Function<Map<K,V>, V>() {
        public V apply(Map<K, V> map) {
            return map.get(key);
        }
    };
}
```

`batch` would be in charge of submitting the request when there are more than N keys accumulated or more than a certain amount of time has elapsed. Obviously, this is just for illustration purposes. In the actual implementation, you'd need to make sure there are no race conditions between adding the key to the batch and getting the future, etc.