[backport] SI-7470 implements fundep materialization

Backports 21a8c6c from the 2.11.x branch under -Xfundep-materialization
as per Miles Sabin's request. Thanks Miles!
pull request feedback
SI-8806 Add lower bound check to Any lint

We already exclude the lint check for infer-any if
Any is somewhere explicit.

This commit adds lower bounds of type params to
the somewheres.

Motivated by:

```
scala> f"${42}"
<console>:8: warning: a type was inferred to be `Any`; this may indicate a programming error.
              f"${42}"
                  ^
res0: String = 42
```
-Xfundep-materialization => -Yfundep-materialization

To quote gkossakowski:

  Thinking about it more, could we hide this behind 'Y' flag instead?
  We have lesser obligation to keep around Y flags and this is something
  we should remove from 2.11/2.12.
Removed empty class, unused imports
Eliminate unreachable code in GenBCode

We rely on dead code elimination provided by the ASM framework, as
described in the ASM User Guide (http://asm.ow2.org/index.html),
Section 8.2.1. It runs a data flow analysis, which only computes
information for reachable instructions. Instructions for which no
data is available after the analyis are unreachable.

There's one issue with the ASM framework (or the way we use it): Data
flow analysis requires the maxlocals and maxstack of each method to be
computed. The ASM framework calculates these maxes only when
writing the classfiles, not during code generation. In order to run
DCE, we therefore run a MethodWriter beforehand on every method. This
assings the MethodNode's maxStack/maxLocals, but it does more work
(writes the instructions to a byte array).

This is also what Miguel uses on his branch. The change is basically
the same as https://github.com/lrytz/scala/commit/bfadf92c20.

We could probably make this faster (and allocate less memory) by
hacking the ASM framework: create a subclass of MethodWriter with a
/dev/null byteVector. Another option would be to create a separate
visitor for computing those values, duplicating the functionality from
the MethodWriter.

For now, I added some timers to be able to measure the time DCE takes.
Here's compiling the library with -Ystatistics:jvm

    time in backend               : 1 spans, 6597ms
    bcode initialization          : 1 spans, 8ms (0.1%)
    code generation               : 1 spans, 4580ms (69.4%)
    dead code elimination         : 3771 spans, 742ms (11.2%)
    classfile writing             : 1 spans, 879ms (13.3%)
-Yopt mulit-choice flag
JUnit tests for dead code elimination.

JUnit tests may use tools from partest-extras (ASMConverters)
Tools to run the compiler in JUnit tests
Clarify why we emit ATHROW after expressions of type Nothing

Tests for emitting expressions of type Nothing.
SI-8568 unreachable test now passes in GenBCode
Remove stale local variables and exception handlers after DCE

This is required for correctness of the generated bytecode. Exception
handlers and local variable descriptors specify code offset ranges.
These offsets have to exist, not be eliminated.
Address review feedback.
Merge pull request #3859 from xeno-by/topic/fundep-materialization-210x

[backport] SI-7470 implements fundep materialization
This ensures that typechecking custom unapplications in silent mode
doesn't leak uncatchable errors. Interestingly enough, the problem
only manifested itself for custom unapply methods, not for synthetic
ones generated for case classes.
SI-8817 Correct scaladoc for scala.sys.addShutdownHook

 - Remove mention that shutdown hook is daemon thread
 - Add link on scala.sys.ShutdownHookThread class
SI-8815  mutable.LongMap makes different choices for splitAt vs etc.

It turns out that take/drop/splitAt/takeWhile/dropWhile inherit a smattering of foreach vs. iterator-based implementations.  These aren't consistent unless they iterate in the same order.  This probably reflects an undesirable underlying weakness, but in this particular case it was easy to make LongMap's foreach order agree with iterator.

Made traversal order of other foreach-like methods match also.

Also fixed a bug where Long.MinValue wasn't iterated.

Added unit test for iteration coverage of extreme values.
isAnonymousClass/Function for delambdafy classes is not true

Ydelambdafy:method lambda classes are not anonymous classes, and not
anonymous function classes either. They are somethig new, so there's
a new predicate isDelambdafyFunction.

They are not anonymous classes (or functions) because anonymous
classes in Java speak are nested. Delambdafy classes are always
top-level, they are just synthetic.

Before this patch, isAnonymous was sometimes accidentailly true: if
the lambda is nested in an anonymous class. Now it's always false.
Merge pull request #3977 from terma/issue/8817

SI-8817 Correct scaladoc for scala.sys.addShutdownHook
SI-8680  Stream.addString is too eager

Used the standard method of sending out two iterators, one twice as fast as the others, to avoid hanging on .force, .hasDefiniteSize, and .addString.

.addString appends a "..." as the last element if it detects a cycle.  It knows how to print the cycle length, but there's no good way to specify what you want right now, so it's not used.

Added tests in t8680 that verify that cyclic streams give the expected results.

Added to whitelist names of methods formerly used for recursion (now looping).