Add support for hash partitioning on multiple channels
Add full support for DISTINCT in aggregations

DISTINCT is processed in a couple stages.
First a marking stage hash partitions the rows on the DISTINCT expression as well as any GROUP BY clause, and then marks the unique rows.
Second the aggregation operators only process the unique rows, if they have a DISTINCT expression