Encode the type constructor for the unpacked collection type into Query.
Simplify Query internals.

- NonWrappingQuery is not really needed. Its use in foreign keys was
  completely unnecessary. TableQuery and the empty Query can extend
  Query directly. All other Query values are of type WrappingQuery.

- With foreign keys cleaned up not to require NonWrappingQuery, we can
  get rid of the special case for that in Query.apply. That makes
  Query.apply identical to Query.pure, so we deprecate Query.pure.

- Rename "unpackable" to "shaped". It's been a long time since the type
  was called Unpackable.

- Introduce Query.empty as the empty query instead of using the Query
  companion object for this purpose.
Allow Query result type constructors to be changed.

- The Query#to method switches to a different type constructor.

- "to" is backed by the new "CollectionCast" Node which changes the type
  constructor. The node itself gets erased in hoistClientOps and is
  ignored by QueryInterpreter.

- We use a ClassTag to track the result type for inspection at runtime.
  If it is a subtype of Seq, the collection is assumed to be sequential
  (i.e. order matters), if it is a subtype of Set, the collection is
  unique (i.e. it does not allow duplicate elements). This
  information can be used later to optimize query translation.

- The CanBuildFrom instances for a type constructor change in "to" are
  required to build a collection with element type Any. This prevents
  the use of optimized builders for specific element types but it
  greatly simplifies the handling of type constructors in the AST.
  Otherwise any operation that could change the element type would have
  to carry a new type constructor that overrides the inherited one. The
  simplified approach is limited to building collections that are either
  contravariant or erased, so it precludes the use of Arrays. As an
  approximation of this precondition we limit the type constructors that
  are allowed by "to" to those extending Iterable.

Tests in ExecutorTest.testCollections.
Provide implicit CollectionTypeConstructors

That way the builder construction is no longer tied to CanBuildFrom and
the definitions of the ordered/unique flags do not have to be hardcoded.
Allow building of non-erased collections through ClassTags.

- All Types and Shapes carry a ClassTag.

- Executors use the result type's ClassTag to get the correct builder
  for the result.

- Provide a CollectionTypeConstructor for Array types.