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.
Alter TailRec to have map and flatMap

As described in the "Stackless Scala with Free Monads" paper

scala> import scala.util.control.TailCalls._
import scala.util.control.TailCalls._

scala> :paste
// Entering paste mode (ctrl-D to finish)

def isEven(xs: List[Int]): TailRec[Boolean] =
  if (xs.isEmpty) done(true) else tailcall(isOdd(xs.tail))

def isOdd(xs: List[Int]): TailRec[Boolean] =
  if (xs.isEmpty) done(false) else tailcall(isEven(xs.tail))

// Exiting paste mode, now interpreting.

isEven: (xs: List[Int])util.control.TailCalls.TailRec[Boolean]
isOdd: (xs: List[Int])util.control.TailCalls.TailRec[Boolean]

scala> isEven((1 to 100000).toList).result
res0: Boolean = true

scala> def fib(n: Int): TailRec[Int] =
     |   if (n < 2) done(n) else for {
     |     x <- tailcall(fib(n - 1))
     |     y <- tailcall(fib(n - 2))
     |   } yield (x + y)
fib: (n: Int)util.control.TailCalls.TailRec[Int]

scala> fib(40).result
res1: Int = 102334155
Stackless implementation of TailRec in constant memory.
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.
Prepare removal of scala-xml, scala-parser-combinators

Every test deleted here has found its way to the respective
repositories of scala-xml and scala-parser-combinators,
where they will continue to be tested with partest.

The modified tests became independent of these modules,
as they should've been from the start.
Remove scala-xml and scala-parser-combinators

These modules move to their own repositories:
  - https://github.com/scala/scala-xml (v1.0-RC3)
  - https://github.com/scala/scala-parser-combinators (v1.0-RC1)

The modularization depends on the new partest, as the old one's
classpath handling did not support a modularized scala.

The compiler pom now depends on the artifacts published separately,
with versions specified in versions.properties.

NOTES:
  - The osgi tests resolve the xml and parsers jars and osgi-fy them,
    as they are no longer built locally.
    TODO: Can we move the osgification to the module builds?
  - Disabled local repositories: don't want to accidentally include
    unpublished artifacts in releases etc.
Don't use sonatype to resolve jars relevant to a release.

To eliminate any delay between deploying partest to sonatype
and using it for development, we resolve it through sonatype.

Not acceptable for jars that ship as part of the release,
such as scaladoc (we'd see a jar others might not see).
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.
Include xml and parsers in dist, tool classpath.

This brings the external modules (xml, parsers)
back to the classpaths of build/(quick|pack)/bin/scala*.

Include the OSGIfied jars for external modules in dist.
(TODO: OSGI-fy externally)

Download javadoc/sources from maven and include in dist.
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
Correcting scaladoc for all classes defining withDefaultValue method.
The description of the single parameter seems to be a copy and paste mistake from withDefault method.
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