Fixes to TreeChecker

1) One phase too many was checked for postconditions.
2) Class members did not have their owners checked because index was not called on them.
Keep SuperTypes around after erasure.

The reason is that otherwise the non-private member super.x gets merged with the private member this.x
and that causes a double binding violation.
Fix class decls in TypeTypeMap

If definitions in a class are substituted by TreeTypeMap, the new
symbols have to show up in the `decls` scope of the class instead of the
old ones.
Make isVolatile a SymUtil method.
Keep inherited names through erasure

If the original name in a selection is a inherited name, the erased name should
also be one.
tpd.TreeOps#select creates non member syms after erasure.

Without this patch, ast.TreeInfo does not compile wfter next commit "Erasure should keep prefixes in
TermRefs". The reason is that outer path genertion generates a data race between

 - an outer accessor created in ExplicitOuter
 - a copy of the accessor created in ElimByName in a TreeTypeMap copy.

The patch avoids the data race by using a fixed symbol for the new TermRef generated in
outer.path during erasure.

But the fix seems ad-hoc. We should try to attack the problem at the root in TypeTreeMap.
The root problem seems to be that TypeTreeMap generates a copy of symbols whnMemere the copies
of the symbols give the same named type as the originals. We can either label the copied symbols
so that any types created from them become instances of WithNonMemberSym (which probably should be
renamed then). Or else we have a "linear" version of TreeMap that overrides sym denotations instead
of creating new symbols.
Erasure should keep prefixes in TermRefs

Bring TermRefs in line with TypeRefs. Prefixes need to be kept so that termrefs
can be re-loaded in subsequent runs.
Phase name change of explicitOuter.
Handle return in tailcalls.

Avoids characterizing the "from" link in a return as a tail call
reference.