[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-8803 generate super accessor for super[A], if A is outer superclass

    class C extends A with T {
      class I {
        C.super[T]
        C.super[A]
      }
    }

A super call in a nested class of the form super[T] where T is a
parent trait of the outer class doesn't need an accessor: mixin can
directly re-route the call to the correct implementation class - it's
statically known to be T$class.

However, if a nested class accesses super[A] and A is the superclass
of the outer class (not a trait), then we need a super accessor in the
outer class.

We need to add the mixin name to the super accessor name, otherwise
it clashes with non-qualified super accessors.
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.
Merge pull request #3935 from lrytz/t8803

SI-8803 generate super accessor for super[A], if A is outer superclass
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.