Add support for nominal types

This PR introduces the notion of nominal types, i.e. types which are uniquely identified by a TypeSymbol. Nominal types are used for Tables and Pure nodes. A nominal type has a structural expansion. For tables, these are computed in the new inferTypes phase. This eliminates the problem that table definitions may not have types for all columns (because a table is not required to define any columns statically) in a very concise and easy way.

It should also enable a much simpler columnization algorithm but I had to abandon my first attempt in https://github.com/slick/slick/tree/tmp/table-type-inference. This PR is based on that branch, except the columnization phases are still the old ones.

Except for columnization, all query compiler phases now operate on typed trees.

The large size of the main commit is mostly caused by the required changes to nodeWithComputedType in all Node implementations.

Review by @cvogt