Proper fix for unstable existential names.

We use De Bruijn-like indices for existential type variable renamings.
This way we properly support nested existential types.
Track dependencies by class names instead of by src file names

Switch to tracking internal dependencies by class names.
It means, the graph of internal dependencies becomes File->String
instead of being File->File. We track dependencies on top level classes
only.

Also, restore the dependency tracking in incremental compiler so it it's the
same as it's done in sbt 0.13.0. This doesn't remove the new dependency
tracking (memberRef and inheritance dependency tracking) but restores
the old code and the API in Relations. This way both dependency
tracking mechanisms co-exist until the old one can be removed (in
next major version of sbt).
invalideIncremental takes two relations now: previous and recompiled.

We use relations in invalidateIncremental method for two major
purposes:

  1. for dependency tracking
  2. for looking up which classes (class names) are products of a given
     source file

Since invalidateIncremental is called after initial recompilation we
should use updated relations so they reflect the new dependencies
(so we know that the file e.g. broke a cycle in dependencies). However,
for products we should use relations before recompilation so we know
which files (that depend on class names) should be invalidated in case
name hashes has changed.

This commit implements passing of both relations and picks the right one
depending on the task we perform (looking up products vs dependencies).

This makes all scripted tests in source-dependencies to pass.