Add Shape levels to differentiate between flat and nested Shapes.

ShapeLevel.Flat is used by all existing Shapes and consumed by the
existing APIs so that they support the same Shapes as before.
Allow unit tests which assure that some code does not type-check.

This consists of a ShouldNotTypecheck macro which does the actual work,
and a modification of the build process to delete the output from these
tests after compiling (because they should be recompiled every time).

(cherry picked from commit 1fe9863472a7d208c78dddab9d4105a55a252e22)
Add a nested Shape for Queries.

Test in NestedShapesTest (including negative compilation tests to
ensure that this shape is not eligible as a flat shape).
Improve Shape encoding to support Columns-level Shapes.

We have to exempt ShapedValue and ProvenShape from the ShapeLevels to
make type inference work. These will only work at level Flat for now.
This level is needed for types than can be passed as parameters to
query templates.
Add a common abstraction for literal and parameter columns.

* ConstColumn becomes the new common superclass. Encoding a reference
  into it preserves its type as ConstColumn, not just Column.

* LiteralColumn replaces the old ConstColumn for literal scalar values.
  The deprecated method ConstColumn.apply provides backwards
  compatibility for creating LiteralColumns.

* ParameterColumn is reintroduced as a special ConstColumn subtype for
  query parameters.

* A new Shape for ConstColumns ensures that they are treated as fully
  packed and that they keep the ConstColumn type when packing them. It
  is necessary to add another level to the implicits hierarchy for Shape
  in order to properly disambiguate the Shapes for Column and
  ConstColumn.
Treat Unit as an empty product type.

Unit, you're not fooling us any longer, hiding among the likes of Int
and Boolean! You're not a primitive type, you're merely an empty product
(even if Scala doesn't admit it), so no more Column wrapper for you!
Introduce "Compiled" computations to replace parameterized queries.

The old "Parameters" method of constructing a parameterized query is
retrofitted into the new scheme to keep source compatibility to a large
degree.

With this new method we also support updating and deleting of
RunnableCompiled queries.

Tests in TemplateTest.testCompiled, MainTest. Fixes issues #17, #102.
Merge pull request #205 from slick/tmp/cached

A new model for query templates