Use ProvenShape to implement shaped * projections
Remove Projection at last.

- MappedProjection is now a simple ColumnBase. It can be created from
  any shaped value.

- Fix a bug in createResultSetMapping that affects SlickBackend with
  the new encoding.

- TypedMapping is not Typed any more. Its type is computed during
  type inference so it can be properly rewritten as needed.

- ColumnBase in general is not Typed any more.
Simplify typing of Nodes.

Half of the Node implementations can be a SimplyTypedNode which greatly
reduces the boilerplate. The other half at least benefits from a split
of nodeWithComputedType into nodeWithComputedType (which is final)
and the abstract nodeWithComputedType2 that they have to implement.
Merge branch 'refs/heads/tmp/nominal-types' into tmp/new-table-definitions

Conflicts:
	src/main/scala/scala/slick/direct/SlickBackend.scala
Remove WithOp.

Apart from tables in the lifted embedding, all uses are switched over to
EncodeRef which gets the same result in a cleaner way without having to
clone existing objects. The WithOp implementation is now contained
directly in AbstractTable and exposed through the EncodeRef interface.
Disentangle lifted embedding tables from TableNodes.

An AbstractTable now has a nodeDelegate that points to a separate
TableNode object. AbstractTable does not extend TableNode any more.

The DDL statement builders still require Table objects from the lifted
embedding. Once we integrate type providers and the associated schema
meta model into master, we should provide access to the meta model
directly through a TableNode.
Complete separation of Nodes and Reps.

This removes all remaining cases of Reps being Nodes. Nodes will no
longer leak into the API and you do not need the lifted embedding to
create them.