Corrections to uniform01 implementation

The two key changes here are (i) the denominator is correctly
calculated for floating-point types and (ii) we introduce a
check that u < 1 before returning, which we can't guarantee
in the case that UniformRNG returns floating-point values in
the closed interval [UniformRNG.min, UniformRNG.max].

Thanks to Andrej Mitrovic for feedback and useful advice in
https://github.com/D-Programming-Language/phobos/pull/2050 :-)