rand: Add next_f64/f32 to Rng.

Some random number generates output floating point numbers directly, so
by providing these methods all the functionality in librand is available
with high-performance for these things.

An example of such an is [dSFMT (Double precision SIMD-oriented Fast
Mersenne Twister)](http://www.math.sci.hiroshima-u.ac.jp/~%20m-mat/MT/SFMT/index.html#dSFMT).

The choice to use the open interval [0, 1) has backing elsewhere,
e.g. GSL (GNU Scientific Library) [uses this range](https://www.gnu.org/software/gsl/manual/html_node/Sampling-from-a-random-number-generator.html), and dSFMT supports
generating this natively (I believe the most natural range for that
library is [1, 2), but that is not totally sensible from a user
perspective, and would trip people up).

Fixes https://github.com/rust-lang/rfcs/issues/425.
It does; there is precisely one value that doubles in frequency: `0.25`. Let `eps` be the floating point precision, e.g. 2<sup>-53</sup> for f64 and `x = eps/4` be the value added here, then `0.25 = 0.25 + x = 0.25' + x` where `0.25' = 0.25 - x` is the largest float less than 0.25.

However, this is doubling from 1 in 2<sup>-53</sup> to 1 in 2<sup>-52</sup> (or 24 &rarr; 23 for f32) which is rather small. It's exceedingly unlikely that a consumer will see 0.25 even once.

I think I investigated this before for the original implementation (this isn't changing it) to see what was done elsewhere, but I have forgot it, and did not record my findings.