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 remove 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#as method switches to a different type constructor. It
  should really be called "to" but that name is taken and we will have
  to go through a deprecation process to change its meaning.

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

- We use a ClassTag to track the result type for inspection at runtime.
  If it is a subtype of Seq, the 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 "as" 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 "as" to those extending Iterable.

Tests in ExecutorTest.testCollections.