SI-7202 tighten name mangling.

Following the discussion at https://groups.google.com/forum/?fromgroups=#!searchin/scala-internals/mangling/scala-internals/GHC3HJTegmw/5py5GH7Rrm8J
re-submitting against master.

When the compiler wants to make private symbol visible outside its
declaring class, it also changes the name to make it unique to avoid
accidental overriding.

The current scheme prepends fullName of the owner class, which could
still result in overriding if the derived class is local.

To avoid such scenario, name mangling prepends not only the names of
the enclosing classes, but also '$' characters for any non-class
owners.

This scheme wouldn't be enough if the base class were local as well,
and the derived class saw it with a non-trivial prefix type; however
scala doesn't allow it.