Add Chris Cain's improved uniform() for integral types

This corresponds to the changes made in phobos pull request
https://github.com/D-Programming-Language/phobos/pull/1717
Remove use of automatic adjacent string literal concatenation

This corresponds to the changes introduced to std.random in phobos
patch a656f26e9ef1e40ffbf0a9e7afafe1b9b8f42091.

See also:
https://issues.dlang.org/show_bug.cgi?id=3827
Remove unnecessary uses of std.string.format
Convert to new alias syntax

This corresponds to the changes made to std.random in phobos patch
b391b2ec9fceb3b47c7374b8ccc8ae5355db5e3f
Add Nils Boßung's uniform distribution for enums
Add UniformDistribution for [T.min, T.max] integral variates

This adds UniformDistribution support for its uniform!(T, UniformRNG)
counterpart.

Note that one potential bug in the current implementation is the fact
that when templated on a character type, it is possible that invalid
UTF8 code points will be generated, which may lead to segfaults or
errors when e.g. writing to console or comparing character values.
Add enum support to UniformDistribution

This matches the corresponding uniform!(E, UniformRNG) functionality
provided by Nils Boßung.
Ensure bounded UniformDistribution supports all int/char types

The cast for the lower bound in uniform() has been corrected: the
earlier check that a < ResultType.max should ensure that there are no
problems with this.

Unittests have been added to ensure that all types are compatible with
all distribution boundaries.

The uniformDistribution helper function arguments have been converted
from ref UniformRNG to UniformRNG to allow rvalue RNG instances to be
passed.  As this package presupposes all RNGs are reference types,
retaining support for ref UniformRNG parameters does not seem necessary.
Ensure uniform01Distribution works with all RNGs and float types

To ensure uniform01Distribution can accept rvalue RNG instances,
the ref UniformRNG parameter has been changed to just UniformRNG.
As this package assumes reference-type RNGs, this should be an
unproblematic change.
Remove ref UniformRNG parameters

The current package assumes that all RNGs are implemented as reference
types, so ref RNG parameters are unnecessary.
Compatibility fix to ensure package works with all D compilers

The T(n) notation for determining the type of constants is currently
only supported by dmd.  Using a cast is necessary for gdc and ldc to
compile uniform01.
Improved unittests for dice()
Improved (and silent) unittests for discreteDistribution
Add DiceType template to allow common behaviour of dice and DiscreteDistribution

The DiceType template enables calculation of an appropriate aggregation
type for use within dice() and DiscreteDistribution.  In this way the
sequences generated can be guaranteed to be identical, without in any
way affecting the correctness of the distribution.

Note that this is a breaking change from std.random.dice.
Improved save-supporting constructors for Cover and Sample
Documentation updates
Improved unittests and experimental-status alerts for random devices

The random device module has been removed from the main package due to
its experimental status, however it can still be imported as a module in
its own right.

The unittests have been improved and made silent.  Note that they may
take an extended period of time to run (over a minute) due to the
blocking nature of /dev/random.
Separate out source and experimental functionality in Makefile

The main SRC variable now only covers the "standard" parts of the
package, while EXPERIMENTAL covers other modules not imported by
default.  Separate unittest builds have been provided for standard
ane experimental functionality.
Add explicit warning to random device module
Document differences from std.random