Support Library.Max in QueryInterpreter.

Requires a better implementation of aggregates that does away with the
initial value.

Test in AggregateTest.testGroupby. Fixes issue #512.
Fix a smorgasbord of bugs for more robust groupBy.

- Expand nominal types in the type of the left side of a GroupBy.
  This type is regenerated as a tuple of the grouping expressions, so
  it should never keep an existing nominal type (which can appear in
  case of an identity grouping).

- Fix typing bug in FlattenProjections. Not all occurrences of a
  flattened NominalType had their structural view replaced.

- Allow complex expressions inside of aggregation functions when
  detecting and rewriting groupBy calls in ConvertToComprehensions.

- Remove literal grouping criteria.

- Allow `max` and `min` aggregations on non-numeric types in
  QueryInterpreter.

- Treat StructTypes of a single column as single columns for the
  purpose of aggregation functions in QueryInterpreter. We already
  did this for ProductTypes.

Tests in AggregateTest.testGroupBy. Fixes issue #510.
Infer correct NominalType views even without the NominalType.

In inferTypes, we used to replace structural views of NominalTypes after
constructing all table types. At that point, however, type inference
(which runs before table types can be determined) may have copied a
structural view on its own (without the enclosing NominalType) into
another type. For instance, this happens in the typing of GroupBy, where
the "by" type needs to be copied purely as a structural view. In these
cases the resulting NoType could not be patched to the correct type. To
fix this problem we use a special NoTypeView(ts) with the same
TypeSymbol as the surrounding NominalType in table types, which can be
patched even after the NominalType has been lost.

Tests in AggregateTest.testGroupBy. Fixes issue #252.