Use lazily connected Metastore clients.

Rework the HiveMetastoreFactory to provide lazily connected
clients. Get rid of all the Future<HiveMetastore> methods.
Add retries and backoff to the HiveMetastore client code.

Use backoff and retry sleeps to combat connection failures. Hide transient
failures from the caller.
add some more logging for the request retry logic
code review feedback