Add basic sketch of a random monad.

Dist[A] is already a monad but requires a generator to be threaded
through it to produce values. The new Random[A, G] monad is also
parameterized on a generator, wraps a Dist[A], and has methods to
automatically thread the generator context through.

This hopefully frees us from the immutable Generator types.
Remove immutable.Generator
Basic Random[A, G] monad is working.
Drastically improved Random monad.

This commit adds trampolining. Previously, if you chained too many
flatMaps you'd hit a StackOverflowException.

One result is that Random no longer wraps Dist by default (since that
design didn't work well with trampolining) although creating a Random
from a Dist should still be possible. There will certainly be some
duplication/redundancy between Random and Dist... we'll just have to
see how much that ends up being in practice.
rename spire.random.gen to spire.random.rng
Add basic sketch of a random monad.

Dist[A] is already a monad but requires a generator to be threaded
through it to produce values. The new Random[A, G] monad is also
parameterized on a generator, wraps a Dist[A], and has methods to
automatically thread the generator context through.

This hopefully frees us from the immutable Generator types.
Remove immutable.Generator
Basic Random[A, G] monad is working.
Drastically improved Random monad.

This commit adds trampolining. Previously, if you chained too many
flatMaps you'd hit a StackOverflowException.

One result is that Random no longer wraps Dist by default (since that
design didn't work well with trampolining) although creating a Random
from a Dist should still be possible. There will certainly be some
duplication/redundancy between Random and Dist... we'll just have to
see how much that ends up being in practice.
rename spire.random.gen to spire.random.rng
Merge remote-tracking branch 'origin/topic/random-take3' into topic/random-take3
fix merge conflict
restructuring MersenneTwister32
Merge remote-tracking branch 'origin/master' into topic/random-take3
Potential refactor to MersenneTwister32.

This refactor does a few things:

 1. Reduces the size of each Generator by removing many fields.
 2. Ensures that saved/restored RNG state works correctly.
 3. Makes constructor package private, creates named constructors.
 4. Improves some constant inlining.
 5. Change companion's "seed" type param to (Int, Array[Int]).

The issue with the previous code was that the constructor would
always reinitialize some fields, even when restoring previous
state via setSeedBytes. Also, the companion's "seed" type parameter
was changed to reflect the actual saved state in the PRNG.

Before this change is applied to the 64-bit version (and potentially
merged) I'd like to get Dusank's opinion on the changes, since it
is his code. I attempted not to change any of the actual RNG logic
(obviously) but it would be great to get the changes reviewed.
fix merge conflict
fix package for MersenneTwister32
some nicer behavior for the random monad
add fromDist method
Add optional unicode operators.

I'm not sure if these will catch on, but it's nice to be able to
support the canonical mathematical symbols.