SI-7779 Account for class name compactification in reflection

We have to assume that the classes we are reflecting on were
compiled with the default value for -Xmax-classfile-name (255).

With this assumption, we can apply the same name compactification
as done in the regular compiler.

The REPL is particularly prone to generating long class names
with the '$iw' prefixes, so this is an important fix for runtime
reflection.

Also adds support for getting the runtime class of `O.type` if
`O` is a module.
SI-7775 Harden against the shifting sands of System.getProperties

If another thread writes a new system property (which can happen
in pretty innocuous code such as `new Date`!), the compiler startup
could fail with a `ConcurrentModificationException` as it iterated
all bindings in the properties map in search of a boot classpath
property for esoteric JVMs.

This commit uses `Properties#getStringProperties` to get a snapshot
of the keys that isn't backed by the live map, and iterates these
instead. That method will also limit us to bindings with String
values, which is all that we expect.
SI-7782 Derive type skolems at the ground level

Rather than at the current value of `skolemizationLevel`,
which could be influenced by an in-flight existential
subtype computation.

This method is called in `PolyTypeCompleter`, which
could be constructed by the lazy type completer of the
enclosing class. So currently it is closing over a mutable
variable; hence the Heisenbug.

This issue was exposed by the changes in b74c33eb860,
which was introduced in Scala 2.10.1.
typedAnnotated no longer emits nulls

Adds a null-check in original synthesis for the result of typedAnnotated.
Previously it was possible for the aforementioned result to look like
TypeTree(<tpe>) setOriginal Annotated(..., null). Not anymore.
Merge pull request #2871 from retronym/ticket/7779

SI-7779 Account for class name compactification in reflection
Merge pull request #2868 from retronym/ticket/7775

SI-7775 Harden against the shifting sands of System.getProperties
[nomaster] SI-7790 No ScriptEngine in 2.10 build

The service entry was inadvertendly added in
`e3b5e0ba40447970d621cfeed5cc1770df69884f`,
"Sanity for build.xml: exscriptus&positus delendus est,"
which is ant latin for: "Reduced copy/pasting to the best
of my antabilities."

With that degree of hubris, it was inevitable that the
commit introduced a copy/paste bug.  What is the Attic
Greek for copy/paste?

I'm pretty sure that in fifth century Athens they would
just pound one inscription to rubble using a bigger
inscription. They had slaves for that kind of work.
You never hear about Socrates tweaking the build script.
That's the reason he never wrote anything down.
Commit .gitignore directly

Rather than relying on the cloner to copy the
provided gitignore.SAMPLE files.

This finishes the job started in c48509598, mostly
by reverting that commit and moving the two existing
SAMPLE files to the final destinations.

Use `.git/info/exclude` to augment the list of patterns
with entries specific to your workflow.
(cherry picked from commit b51cb581270da7021b2ea122dc059847101d56a7)

==============================================
Paring back the scope of our shared .gitignore

Importantly, limit the exclusion of build.properties
to the file in the root directory, paving the way for
the return of an SBT build.

  - Unignores .bak, .jar, and ~
  - limit ignorance of qbin to the root directory

.log files, generated by partest, are still ignored.

To see ignored files in your workspace, try:

    git ls-files --others --ignored --exclude-standard -- test | grep log
    git status --ignored -- test
(cherry picked from commit f0bbd2ca32acb40be37dc382c1f95081deca3f22)
Merge pull request #2897 from retronym/backport/gitignore

[backport] Commit .gitignore directly
Merge pull request #2891 from som-snytt/issue/7790-no-scriptengine

SI-7790 No ScriptEngine in 2.10 build
SI-4760 Parser handles block-ending import

Don't molest the RBRACE.

Updated with additional parse tests suggested
by @retronym.  "What are you lazy?"  Yes, I
must be lazy.  Can't ScalaCheck or Par-Test
generate these tests automatically?  That seems
like a reasonable expectation.
Change Scala license to unmodified 3-clause BSD.

No longer using the slightly reworded 3-clause BSD license.
This does not change the meaning of the license,
just aligns it with the standard wording.
SI-7150 Replace scala.reflect.internal.WeakHashSet

Replaces scala.reflect.internal.WeakHashSet with a version that
* extends the mutable.Set trait
* doesn't leak WeakReferences
* is unit tested
SI-7149 Use a WeakHashSet for type uniqueness

Currently type uniqueness is done via a HashSet[Type], but
that means the Types live through an entire compile session, even
ones that are used once. The result is a huge amount of unnecessarily
retained memory. This commit uses a WeakHashSet instead so that Types
and their WeakReferences are cleaned up when no longer in use.
Modify perRunCaches to not leak WeakReferences

perRunCaches was using a HashMap of WeakReferences which meant it would
accumulate WeakReferences over time. This commit uses a WeakHashSet
instead so that the references are cleaned up.
Merge pull request #2899 from som-snytt/issue/4760-parser

SI-4760 Parser handles block-ending import
Merge pull request #2876 from retronym/ticket/7782

SI-7782 Derive type skolems at the ground level
Merge pull request #2901 from gkossakowski/backport-uniques-memory-fix

Backport #2605 to 2.10.x: SI-7149 Use a WeakHashSet for type uniqueness
Merge pull request #2888 from xeno-by/topic/typed-annotated

typedAnnotated no longer emits nulls
Merge remote-tracking branch 'scala/2.10.x' into merge-2.10.x

Conflicts:
	bincompat-backward.whitelist.conf
	bincompat-forward.whitelist.conf
	src/reflect/scala/reflect/internal/SymbolTable.scala
	src/reflect/scala/reflect/internal/util/WeakHashSet.scala
	src/reflect/scala/reflect/runtime/JavaMirrors.scala