Install method for SymDenotations

Add a new method to install a SymDenotation after a specific
phase has run. The new denotation replaces the current denotation
of the symbol starting with the period after the given phase.
Bridge generation in erasure implemented.

Relies on meaning of "override" to see which bridges are required.
Doesn't take in account value classes for now
Uses 'adapt' used by erasure for converting arguments and return value.
Merge pull request #109 from DarkDimius/erasure-bridges

Bridge generation in erasure implemented.
Merge pull request #116 from dotty-staging/add/Denotation-update

Install method for SymDenotations
Corrected computations of union denotations.

Cannot discard a symbol simply because the other side's type is weaker.
If in (A | B)#m A and B resolve to different symbols `m`, the resulting denotation
cannot have either `m` as symbol; it must be NoSymbol instead.
Fleshed out Splitter phase

Implemented splitting operations

As a side effect, this contains a test ruling out structural term member dispatch.
Tests 0586 and 0625 which used structural dispatch got moved to neg.
Better printing of denotations.

Used to print <none> for denotations with a symbol,
now prints "some I" where I is the denotation's info.Reworked phases.
TreeCheckers use re-typing...

... to check whether tree types make sense. Still produces errors when enabled.
Avoid creating a local dummy when retyping.

Retyping should not create new symbols and that includes local dummys.
Reworked TermRef handling

The main problem with TermRef handling was that signatures were not always tracked correctly.

New invariant: A TermRef that points to a symbol is always a TermRefWithSig, and the signature
is the one of the corresponding member.

We achieve this by sometimes generating a new TermRefWithSig if a TermRef gets a denotation.

One possible simplification would be to always store a signature in a TermRef.

There's still a problem in TermRefWithSig#newLikeThis, which currently works only if the previously stored
denotation references a symbol. We will need to generalize JointRefDenotation to contain multiple symbols for
a complete fix.
Flag self names that conflict with parameters or members

A self name may no longer have the same name as a parameterless
class member (or param accessor). The restriction makes sense because
otherwise scoping is confusing. It's needed because otherwise we get
TermRefs that have the same name and prefix but denote different things.

Moved some code which exercises this from pos/typers to neg/typers
Option for testing for double bindings

A double binding is if a named type gets assigned two denotations in the same period. This is
a side-effect and also a race condition, so it's very bad. I am trying to eliminate all causes of this. But one cause which will likely remain are double defitions in a prgram, if a user writes

    class C {
      val x: Int
      val x: Int
    }

Then it's really hard to avoid setting two meanings of C.this.x! That's why the testing
against double bindings is enabled by a -YnoDoubleBindings option. The understanding is that
-YnoDoubleBindings should be set only if there are no double def errors anticipated. Otherwise
the program might fail with an assertion error before the double def error is reported.
Cleanups

Conflicts:
	src/dotty/tools/dotc/transform/Splitter.scala
Shadowed references

In TypeAssigner#ensureAccible we sometimes pick an inherited public
member as the denotation of a NamedType instead of an inaccessible
private one. The problem is that both are denotations for the same type,
which caused a noDoubleBindings assert failure. We now solve this problem
by creating a "shadowed" named type to hold the inherited member.

The shadowed named type is distinguished by its name, which reads

    (inherited)originalName

In the future, we should make this more robust by using a general
tagging scheme to create shadowed names.

Another fix is about import symbols. They are now referenced with
NonMemberTermRefs. With this fix, the test suite passes with no
double def violations.
Merge pull request #115 from dotty-staging/fix/double-bindings

Fix/double bindings
Fix lazy vals tests broken by previous commit.
Port LazyVals to use hasAnnotation.

Instead of by-hand testing of modifier type.
Merge pull request #118 from dotty-staging/fix/annotations

Fixing annotations
Fixing prefix of implicit members

Implicit members are TermRefs that should have a prefix corresponding to the object of which they are a member. They used to have the ThisType of their owner before.

`implicits2` provides a way to verify that the change works. It would be good to turn this
into a more robust test at some point.  But it's not high preiority, so I prefer no test to a fragile test.
Members of stable methods

Stable methods are introduced from getters by inserting () parameters.
This change makes sure that adding () does not lose the members of an
ExprType.