Refactor hive functions into client, add thrift client support

HiveClient interface for:
  - table_location
  - table_schema
  - table_exists
Implementation using `hive` invocations, and the thrift metastore
client.

Note: this changes luigi.hive.table_location to take a dict instead of
a partition string