Fix HiveClient representation of Double in Partition keys
Allow PredicatePushDown optimizer to handle NullLiteral from nullInputEvaluator
Add support for range predicate pushdowns

This work is a complete refactor of how we generate Partitions in the planning/execution phases.
Instead of generating Partitions after planning, we now integrate the generation directly
into the optimization planning phase so that we can iterate our plan based on data returned
by the Partitions that we discover. This not only provides a number of opportunities for
optimization, but also significantly simplifies the amount of cross-talk between the
split generation and the planning phases. As a result of these changes, it makes
it much easier to build native range predicate push downs.
Add --source option to CLI

This lets you set the source of the query for logging purposes. Tested
by running the CLI with --help to make sure the option showed up, and
added a unit test
Use UUID for native shard IDs
Work around race condition in import flow used by TestDistributedQueries
Add hash partitioning to distributed planer
Extract tupleInfos and sources in PlanFragment constructor
Move all exchange scheduling logic to SqlStageExecution
Manage output buffer set as single unit
Add hash partitioned aggregations