Implement Float.parseFloat in terms of Double.parseDouble.

Instead of the other way around. According to our spec, going
through a Float could discard the Double precision.
Improve feedback in case of UndefinedBehaviorError.
Merge pull request #1199 from sjrd/improve-undef-behavior-feedback

Improve feedback in case of UndefinedBehaviorError.
Fix #1171: Split: Sometimes remove leading empty match

The conditions were determined experimentally since the JavaDoc is
note precise enough.
Introduce Floats in the IR.

This does not change what is emitted in fine. It is simply
a different spec of the IR in which Floats are separated from
Doubles.
Fix #1135: fast Floats + on-demand compliance for Floats.

Floats now use the built-in Math.fround for its operations if the
built-in exists (in which case we hope the VM will optimize it).

Additionally, with a semantics config:
  set scalaJSSemantics ~= { _.withStrictFloats(true) }
the linker will produce strict floats, which always behave as on
the JVM (32-bit precision). On VMs that do not support
Math.fround, we use one of two polyfills: either one based on
Float32Array if that is available, or a slow one that does not
require anything fancy.
Merge pull request #1198 from gzm0/fix-regex

Fix #1171: Split: Sometimes remove leading empty match
Merge pull request #1194 from sjrd/floats

Fix #1135: fast Floats + on-demand compliance for Floats.
Fix #1175: Tighten the definition of Closure nodes.

Capture parameters are separated from normal parameters,
since they play very different roles, and have different
requirements.

Captures can have any type, but must always be immutable.

Parameters must always be of type AnyType, but can be mutable.

Additionally, thisType and resultType disappear, and are now
always implicitly AnyType.