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.
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 #1194 from sjrd/floats

Fix #1135: fast Floats + on-demand compliance for Floats.