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]];
```



no-op comment: could replace this function with

```python
return any(isinstance(sx, TupleExpression) for sx in ex.walk())
```

I think. Not that this is necessarily clearer or better in any way.