Add option -port to fsc

Option "port" limits compile server lookup and start to given port.
Normally fsc will start a compile server in a random port if no server
is yet running. This can be problematic with firewalls and/or remote
compile servers. Option "port" should not be confused with option
"server" which looks for a compile server in given host and port and
fails if such server is not found.

Automatic tests for command line user interface do not exist at all.
Thus, adding a test for one new option would require designing a whole
new testing method.
Let users specify a different location for build repos than user home

This change is helpful e.g. when setting up CI for Scala and it's important which directories are used by a build.
By default it uses .m2, .pax and .sbt/cache from user home (in general $HOME). Sometimes it's not possible to use
this location and also changing a value of $HOME is not an option.

The required location should be specified both for ant's build.xml and used scripts.
In the first case specifying -Duser.home is all, what we need. But we can't just set _JAVA_OPTIONS
as then partest tests fail due to the unexpected output (an additional 'Picked up java options (...)' messages).
We can set ANT_OPTS instead of this. The only problem was that OSGi JUnit tests (only they) were using $HOME anyway.
I forced them to use -Duser.home by propagating this option in build.xml.

binary-repo-lib.sh is changed to use a special env variable or $HOME, when this variable is not set.

Then we can do:

export SCALA_BUILD_REPOS_HOME=<some_dir>
export ANT_OPTS="$ANT_OPTS -Duser.home=$SCALA_BUILD_REPOS_HOME"
ant dist

and it will create all directories .m2, .pax and .sbt/cache in a specified $SCALA_BUILD_REPOS_HOME directory.

Note: maven's settings.xml should be located in this used $SCALA_BUILD_REPOS_HOME/.m2 and point to the
repository like <some_dir>/.m2/repository
Fixes memory leak when using reflection

References to Threads would be retained long after their termination if
reflection is used in them. This led to a steady, long memory leak in
applications using reflection in thread pools.
Merge pull request #4148 from SpinGo/issue/SI-8946

SI-8946: Fixes memory leak when using reflection
Merge pull request #4130 from mpociecha/let-specify-build-repos-home

Let users specify a different location for build repos than user home
Merge pull request #3934 from teemulehtinen/fsc-port-arg

FSC server port selected by argument
SI-8946 Disable flaky test for reflection memory leak

It passed in PR validation but failed in a later run.
There are some clever ideas bouncing around to make it
stable, but in the meantime I'll shunt it into disabled.
Merge pull request #4170 from retronym/ticket/disable-8946

SI-8946 Disable flaky test for reflection memory leak
SI-8976 MutableList.tail.iterator.size is length

The previous behavior was to iterate over the mutated
list of arbitrary length. The previous iteration of
the iterator would also iterate the terminal element
of the list without halting.

This is fixed by capping the length of iterator.

That is OK because mutating the list by adding to it during
iteration is not recommended.

For good measure, the exhausted iterator does not hold
a reference to any remaining tail.

A test is added that will no doubt be superseded by the QCC tests.
(Quasi-Comprehensive Collections.)
SI-8976 Improve test for collectability

Use the memory pressure thread to simplify testing for collectability.

The test thread blocks on the reference queue with a longish timeout.

If the allocator thread sees the heap grow, or sees the reference get
cleared, it will stop automatically.

On heap growth, the test thread is interrupted; it will block on the
queue a second time, without the allocator (which is extraneous
because it has already witnessed memory pressure). This allows the
test to run in parallel with other arbitrary activity.

The timeout on the queue.remove determines the timeout period for
the test.

Both API in the test utility are exercised: one takes the reference
object explicitly, the other takes just a value generator.
SI-8976 assertCollectables for many samples

Instead of waiting for an object to be collected, while
generating garbage, produce more sample objects amongst
the trash and be satisfied if any of them is collected.
SI-8946 Test for retained threads

Use `assertCollectables` to test that threads which use
reflection can be garbage collected.