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.
dSFMT operates on numbers between 1.0 and 2.0, just ors with 1 in the smallest bit and then subtracts 1.0 to lie in the open interval `(0.0, 1.0)` (e.g. 0 becomes 2<sup>-53</sup>). That behaviour *halves* the output space, but it does not lead to a bias.

GSL does rejection sampling (calling the RNG  until 0 is not encountered, which is rather likely). I guess we should consider doing that.