Better dce, making a difference between static/dynamic linking.

Most calls in Scala use dynamic linking, i.e., overrides in
subclasses are taken into account. A few call kinds use static
linking: constructor calls, and super calls (arguably, calls
to methods of impl classes also use static linking).

This commit refines the set of reachable methods by retaining
the difference between static linking and dynamic linking. For
example, in the snippet:

class Foo {
  def foobar = 42
}
class Bar extends Foo {
  override def foobar = 3
}
def doSomething(foo: Foo) = foo.foobar
doSomething(new Bar)

the method Foo.foobar can now be eliminated (but not Bar.foobar),
because the dce can tell that only Bar's are created (not Foo's),
and because foobar is overridden in Bar, the foobar in Foo can
never be called.

It can tell so because the call to foobar in doSomething() uses
dynamic linking. Previously it would have to keep Foo.foobar
because it thought that static linking was possible there,
effectively calling Foo.foobar although it is overridden in all
instantiated subclasses.
Hide most of the trace reporting of dce under 'last' command.

Because the full output is overwhelming.