Optimize partition pruning for Hive client

- replace usage of Warehouse.makeSpecFromName with a more efficient implementation
- build filters based on all partition keys, even if they are missing and call
  getPartitionNamesByParts. Use empty string as placeholder for missing filters
- short-circuit parsing partition key values and creating partition objects if
  we can determine the partition doesn't match the predicate