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 the new type UnassignedStructuralType(ts) with
the same TypeSymbol as the surrounding NominalType in table types, which
can be patched even after the NominalType has been lost.

The only remaining use of NoType in StarAnd can be replaced by
UnassignedType, thus eliminating NoType entirely.

Tests in AggregateTest.testGroupBy. Fixes issue #252.