AST transformations for DISTINCT aggregates

Splits DISTINCT aggregates into two shuffles: the first to hash-partition selected expressions and the second to rendezvous at a single reducer that will do the final aggregation.

The general structure for a SQL rewrite is:
```
SELECT <aggregate fn>(DISTINCT <exprs>) FROM <source>
```
gets transformed into
```
SELECT <aggregate fn>(*) FROM
   (SELECT DISTINCT <exprs> FROM <source>) <Shark-internal alias>
```
where <source> is a table, subquery, or a table or subquery alias.