Change name of DiceRange to RandomDie

Using "RandomDie" instead of DiceRange makes it more consistent with
the names of other ranges wrapping RNG (such as RandomCover and
RandomSample) in std.random.
Refactor unittest and add new test checking that dice rolls differ

InputTypes, a list of all valid input types, was used in two different
tests but was not shared. The refactoring moved it up a scope and
allowed it to be shared instead of duplicated.

A test to check that dice rolls didn't always return the same was
added. This was something that was missing previously and might be
useful to assure the validity of future changes.
Change randomDie rng to value type

This change makes randomDie consistent with other random ranges w.r.t.
storing the rng as a value instead of as a pointer. This will prevent
issues arising in code such as this:

    auto foo()
    {
        Random rng;  // will be deleted on exit of this scope
        return randomDie([0.5, 0.5], rng); // using later will error
    }

Additionally, the documentation has been updated to display a warning
similar to the warnings given to randomCover and randomSample to alert
users of the common pitfall of using value-based rngs.

Finally, a test assuring that using the default rng is safe from this
pitfall has been added.
Change order of randomDice arguments and offer variadic form

Changing the order of the arguments makes randomDice more consistent
with dice and allows randomDice to have a typesafe variadic form,
such as allowing for:

    auto list = ["somewhat common", "very common", "rare"];
    auto choices = randomDie(25, 50, 1).map!(e => list[e])
                        .take(1000).array();

The documentation has been updated to reflect the changes and the new
feature and a unittest has been written to confirm its functionality.