Clean up cname/confName confusion in TestKit
Add DistributedProfile/Driver/Backend.

DistributedDriver is closely related to MemoryDriver. It shares the same
data representation and types to be used at the outermost layer of a
query. Instead of accessing tables in a HeapBackend database, it lets
other drivers compute subqueries around tables provided by those drivers.

- The new MemoryQueryingProfile/Driver contains the parts of the API and
  implementation which can be shared between MemoryProfile and
  DistributedProfile.

- A DistributedBackend bundles a number of other backends and can create
  shared sessions. There is no transaction management in this initial
  version.

- DistributedDriver is only available as a class, not as a singleton
  object like the other drivers. You need to create a concrete instance
  for a number of drivers over which you want to query and use a
  corresponding DistributedBackend with the matching databases in the
  same order.

- StaticType and ScalaType are unified. Every TypedType needs to be able
  to provide an equivalent ScalaType and drivers must be able to
  translate the extended set of predefined ScalaTypes that match the
  types of their supported profile into their own type representation.

The query compiler and executor are not functional yet, so even the first
test for distributed querying is commented out.
Move assignTypes phase further up
Simplify the early query compiler phases
A first working version of distributed querying.

Query ASTs are analyzed to find the largest possible subtrees that get all
data from a single driver and are not tainted by references to data from
other drivers. These subtrees are compiled by the respective drivers. The
resulting AST is evaluated with the query interpreter which delegates
evaluation of the compiled subtrees to the drivers.

There are no optimizations (e.g. evaluating subtrees in parallel, or
reordering operations for better locality) yet in this version.

- ExpandRefs has to know about the special DriverComputation nodes. Once
  all compiler phases can operate on typed ASTs, this could be done in a
  type-driven way without knowledge of any specific node types.
A simpler encoding of 'from' refs in Query objects.

D'Oh! Why didn't I think of this before? This makes the whole
reconstructProducts phase obsolete! And with reconstructProducts gone, we
can also merge the inline phase into localizeRefs and get rid of the
intermediate LetDynamic representation.
Remove TableSymbol.

Another artifact of a previous query compiler design which is not needed
anymore.
Merge pull request #162 from slick/tmp/distributed-driver

Baisc query scheduling implementation