Simplify Invokers

- Remove parameterized Invokers. They hugely complicate the API
  (overloads for UnitInvoker; some UnitInvoker methods require
  parens, others forbid them) and the implementation.

- The Lifted Embedding did not expose parameterized Invokers anymore
  since 2.0. With this change, the distinction between QueryInvoker,
  UnitQueryInvoker and MutatingUnitInvoker (for applied compiled
  queries) goes away.

- Adapt StaticQuery to the new model. The API stays mostly compatible.
  StaticQuery is now only a builder for the query, the actual execution
  is done by a new StaticQueryInvoker. Parameterized StaticQuery objects
  have to be applied first to get the Invoker. For compatibility with
  the old API, there is an implicit conversion for StaticQueries with
  Unit parameters.
Simplify Option handling in JdbcProfile.

- Remove the useless TypeInfo abstraction in BasicProfile. It is not
  needed at this level. Sub-profiles should have more flexibility for
  implementing types.

- Represent only base types with JdbcType, not Option types. JDBC is
  based on optionally nullable base types. Making this more explicit in
  the handling of Option columns should simplify the implementation of
  more efficient "fast path" mapping converters in the future.

- JdbcType.nullable is no longer needed.
Remove zero values from ScalaType.

We used them as default values in MemoryDriver but this is not necessary
for compatibility with SQL databases. Inserting into a row without an
explicit value or an explicit default defined in the schema is always
equivalent to inserting NULL. On a real database it leads to a
constraint violation if the column in question is not nullable. With
this change, MemoryDriver also uses null as the default for all data
types. Constraints are not enforced (in any scenario in MemoryDriver).