Extracts simple (unqualified) names mentioned in given in non-definition position by collecting
all symbols associated with non-definition trees and extracting names from all collected symbols.
Also extract the names of the types of non-definition trees (see source-dependencies/types-in-used-names-*
and source-dependencies/as-seen-from-* for examples where this is required).

If given symbol is mentioned both in definition and in non-definition position (e.g. in member
selection) then that symbol is collected. It means that names of symbols defined and used in the
same compilation unit are extracted. We've considered not extracting names of those symbols
as an optimization strategy. It turned out that this is not correct. Check
https://github.com/gkossakowski/sbt/issues/3 for an example of scenario where it matters.

All extracted names are returned in _decoded_ form. This way we stay consistent with the rest
of incremental compiler which works with names in decoded form.

Names mentioned in Import nodes are handled properly but require some special logic for two
reasons:

The termSymbol of Import nodes point to the symbol of the prefix it imports from
(not the actual members that we import, that are represented as names).
2. ImportSelector is not subtype of Tree therefore is not processed by Tree.foreach.

Another type of tree nodes that requires special handling is TypeTree. TypeTree nodes
has a little bit odd representation:

TypeTree.hasSymbol always returns false even when TypeTree.symbol
returns a symbol
2. The original tree from which given TypeTree was derived is stored
in TypeTree.original but Tree.forech doesn't walk into original
tree so we missed it

Given a class symbol cls, construct a name representing this constructor.

Given a class symbol cls, construct a name representing this constructor.
For a class:

a.b.Foo

this is:

a;b;Foo;init;

The prefix is important to avoid name hashing all constructors together
(see #97), the weird format is necessary to avoid scalac or zinc trying to
interpret this name (in particular we should not use '.' and we should not
use '<init>'), we use ';' because it is one of the few characters that
cannot appear in a valid JVM name.