Fix Issue #5240: faster std.random.uniform for [0.0, 1.0) range

Following typical design in other languages, the function is named
uniform01.  It can be templated on floating-point type, defaulting
to double if none is specified.

The implementation is pretty much derived from its counterpart in
Boost.Random, in particular in its taking account of the different
requirements for integral versus floating-point RNG values, and in
checking that the generated variate is less than 1 before returning.
This last check is necessary simply because we can't guarantee, in
the case of a floating-point based RNG, that we will not get a
result exactly equal to 1.

Fixes http://d.puremagic.com/issues/show_bug.cgi?id=5240
Mark methods for random number generators in std.random as safe pure nothrow
Small optimization to uniform01

Only need to chech u < 1 if RNG returns non-integral variates.
Use plain uint array for InversionList

Storage for static data was long since compressed so it no longer plays a role at compile-time.
Memory requirements at run-time are modest anyway.
fix property enforcement
Merge pull request #2065 from 9rnsr/enforceProp

fix property enforcement
Merge pull request #2050 from WebDrake/uniform01

Fix Issue #5240: faster std.random.uniform for [0.0, 1.0) range
fix Issue 12505 - Null pointers are pretty-printed even when hex output is requested
Merge pull request #2068 from 9rnsr/fix12505

Issue 12505 - Null pointers are pretty-printed even when hex output is requested
fix Issue 11778 - format for null does not verify fmt flags.
Merge pull request #2069 from 9rnsr/fix11778

Issue 11778 - format for null does not verify fmt flags.
Mark LinearCongruentialEngine.front and XorshiftEngine.front as const
Merge pull request #2063 from blackwhale/faster-sets

Use plain uint array for InversionList (std.uni)
Merge pull request #2051 from tom-tan/safe-pure-nothrow-std-random-generators

Mark methods for random number generators in std.random as safe pure not...
Fix issue# 12507: SysTime.init.toString() blows up.

It didn't used to be possible for SysTime.init to have a non-null
timezone member, since member variables of class type did not used to be
able to initialized at compile time. That is no longer the case, and in
order to make it so that toString returns a special value, SysTime.init
now has a special timezone which is unique to it which makes it so that
it's treated kind of like NaN in that until you assign a value to it, it
retains the same value regardless of the operation called on it.

SysTime.init is now equivalent to 0001-01-01T00:00:00+00:00.
Remove unnecessary versioning from SysTime's unit tests.

version(testStdDatetime) is no longer necessary. It only existed due
deal with with when dmd ran out of memory on Windows when compiling the
unit tests. That has not been the case for some time now.
Remove commented-out variant.