Improve Interval[A].

This commit adds some new operators: ~ and --.

~x returns a list of intervals which comprise the complement of x.

x -- y returns a list of intervals which are in x but not y.

The commit also fixes a subtle interval bug with intersection.

This commit fixes a small bug with intersection, and
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