Allow for UDAs with multiple return values

Allow for multiple arguments from the emit clause of a UDA:

```
uda SumCountMean(x) {
  [0 as _sum, 0 as _count];
  [_sum + x, _count + 1];
  [_sum, _count, _sum/_count];
};
```

As per yesterday's discussion, I did not modify the underlying expression framework to be "tuple aware".  Rather, we instantiate one scalar-valued function for each argument in the emit clause.

The Myrial parser is augmented with a TupleExpression type, which stores a collection of scalar-valued expressions.  These TupleExpressions are compiled away at the end of parse phase -- i.e., no code outside the parser knows about tuple-valued expressions.

TupleExpression instances are only legal as naked emit arguments.  That is, tuple-valued aggregates cannot be nested or combined in any way with other expressions.  Legal:

```
Y = [from X emit SumCountMean($3) as [_sum, _count, _mean]];
```

Not legal:

```
Y = [from X emit SumCountMean($3) * 5 as [_sum, _count, _mean]];
```



Gotcha. Just to sanity-check, the things you're storing are immutable?

One thing I've wanted in the past is an identity-dict. You see me somewhere use `id(x)` as the key of `x` when `x` is not hashable.