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:
```scala
  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.
I have thought some on this. I even considered having a 3-way option: never `fround`/`fround` if available/always `fround`. In the end I decided against it is only allowed the two latter options. Since `fround` is a new API, either you have an old VM that does not implement it, or you have a modern VM that implements it and (will eventually) optimize it (or you have VM that doesn't matter in real life, e.g., Rhino). So yes, I think it is fine to assume that VMs providing this function will optimize it, if not now, soon.

Also, note that for VMs that do not provide `fround` but that matter, they support at least simple forms of inlining. And the polyfill in non-strict mode is an identity, static function, which will definitely be inlined. So the performance impact should be 0.