[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-8474  Inconsistent behavior of patch method

Changed Iterator to be consistent with other collections.

Also fixed SeqViewLike to validate/constrain inputs.

No specific tests; quasi-comprehensive collection tests will cover this later.
SI-5254 running an empty scala script should succeed

The script runner made the assumption that "compilation succeeded"
implies "there is a Main class to run", but this can be wrong if the
script is empty (or only contains imports/comments).

The ScriptRunner now uses the ClassPath utility to check if there really
is a main class. If not, it doesn't try to run it and returns
peacefully. This also makes `scala -e ''` succeed.
Fix assertThrows, and the behaviors that it shadowed

The test in StdNamesTest was introduced in cff8b569, where newTermName
would throw on a negative length. In b090f97 this was changed to fix
the negative length, but the test was not adapted (as it didn't fail).
-Ystatistics accepts a list of phases, cleanups in MultiChoiceSetting

MultiChoiceSetting and Xlint with its deprecated aliases is now a bit
simpler, but there's still room for improvement, as noted in comments.
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
```
Use Enumeration for MultiChoiceSetting

This is pretty easy, since a ValueSet is a BitSet.

When the setting is updated, recompute the current
set of values, which is cheap and succinct.

Checking a flag is also easy and fast.

Choices in MultiChoiceSettings may enable other choices.
Fix broken URL for MathJAX Javascript dependency.

Loaded using an DNS alias for the CDN, as per the
[instructions](http://docs.mathjax.org/en/latest/configuration.html)

I also switched from `latest` to `2.3-latest`, so that we don't
automatically perform major upgrades.
Address PR feedback, fix MultiChoiceSetting.contains
Make MultiChoiceSetting.compute easier to understand
Merge pull request #3939 from lrytz/ystats

-Ystatistics accepts a list of phases for which to print stats
Merge pull request #3801 from Ichoran/issue/8474

SI-8474  Inconsistent behavior of patch method
Merge pull request #3946 from gourlaysama/wip/t5254

SI-5254 running an empty scala script should succeed
Merge pull request #3967 from retronym/topic/mathjax

Fix broken URL for MathJAX Javascript dependency.
[nomaster] SI-8764 fix return type of case class productElement under Xexperimental

Under Xexperimental, productElement now returns the lub instead
of the weak lub of case class parameter types (numeric widening
shouldn't magically happen *inside* productElement).

This was removed from 2.12.x in 6317ae2.
Merge pull request #3938 from gourlaysama/wip/t8764

SI-8764 fix return type of case class productElement under Xexperimental
-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%)