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.
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.
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
Names tagged with (inherited)

Shadowed NamedTypes will be expressed by having a special name. For the moment
the name will be

    (inherited)name

where `name` is the original name of the NamedType.

This is a stop-gap measure to express shadowed NamedTypes. Can be reverted
when we have proper name tagging.
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.
Fix to overriddenSymbol

Private symbols don't override anything. Also, removed unneeded method
selectNonMember.