Merge pull request #189 from dotty-staging/merge

constructors & getters-setters
Add echo method to printers.

It's often useful to print a value as it is returned. This method
avoids the temporary variable to hold the vaue before it is printed
and then return. I.e.

    printer.echo(msg, expr)

instead of

    val x = expr
    printer.println(msg + x)
    x
Avoid hoisting local classes

The patch disables hoisting of classes local to a block into the
result type of the block.

Instead, we widen the result type of the block to one which reflects
all refinements made to the parents type of the local class.

Test cases in avoid.scala, t1569.scala.

The original t1569.scala no longer works. Why is explained in neg/t1569-failedAvoid.scala
More assertions in TreeChecker.

Flushed out a caching bug in Scopes.
Insert .package for package object references

Package object members are seen as members of the enclosing package during
typer. The normalization inserts the missing .package reference to such members.

It is necessary to satisfy a new postcondition of FirstTransform: In a selection `x.m`,
the type of `x` must derive from the owner of `m`.
TreeTypeMap needs to map declarations of mapped classes

... and these mappings have to be part of the applied substitutions.
Without the patch, the postCondition of FirstTransform fails for TreeInfo.scala and others,
because it selects symbols which are not defined in the mapped class.

Unrelated bugfix: JavaArray derives from Object.
Fix to TreeTypeMap

Now handles the case where a class symbol itself is not changed by the map,
but one of its declarations is. In this case we need to back out, and create
new symbols for the class and all other symbols that are defined in the same scope as
the class.
Implement findMember for JavaArrays

... by forwarding to Object. Without this, LambdaLift fails for core/Contexts.scala.
Rename flag Static -> JavaStatic

Static has two meanings: In the Java sense, and in the Scala sense, where it means
a member of a package or static module. The change makes it clear that the flag means
Static in the Java sense.
Fix flatten problem in erasure

Statement sequences need to be flattened after processing, not before.
Two fixes to avoid scanning package contents

typeParams and outerAccessor both potentially scan all declarations of a class.
The fixes make sure this is never done for packages.
Fix to enclosingClass

The skip logic in enclosing class worked only when the original symbol was labelled
inSuperCall. The patch makes it work also for symbols that are in turn owned by an
inSuperCall symbol. Also it treats JavaStatic terms as also not being enclosed by
the lexically enclosing class.
Fixes to LambdaLift

Several fixes to LambdaLift. The test suite now succeeds with LambdaLift enabled.
Added missing case for SuperTypes to TypeComparer
SuperTypes are now promoted in Retyper; lambdaLift fails to Ycheck otherwise.
LambdaLift checks now explicitly for references to labels outside scope.

Nested methods cannot refer to labels in theior environment. Needs a fix in TailCalls.
Moved failing test to pending.
Fixes erasure of super

 - supertype components needs to be recursively erased

Without this fix, some files do not pass -Ycheck:lambdaLift
Strenghten postCondition of firstTransform

All tests pass, but good to have the condition in there.
Initialize lambda lift maps

... so that they do not spill over between compilation units. It would be better to wipe the maps after
processing a compilation unit, but right now we do not have a hook for that. A better solution should
be possible once we replace init by "prepareUnit/transformUnit".
Replace some idents by selects in LambdaLift

If a symbol becomes a class field, references to it need to be selections, or
else we get a "bad type" assertion violation in TreeChecker.