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
Clean up 2 redundant NOP expressions
Merge remote-tracking branch 'origin/topic/random-take3' into topic/random-take3
fix merge conflict
restructuring MersenneTwister32
Upgrade sbt plugins to latest versions.

Unidoc 0.3.0 has changed the way you configure excluded projects so we
updated the build configuration.

The outdated versions of plugins depended on outdated version of dispatch
library and that was causing problems when plugging spire into Scala
community build.
Remove unnecessary Caliper-related boilerplate from Build.scala.
Fix Interval#pow as well as Polynomial#apply

Interval#pow should never return a negative bound when called with
an even exponent. Polynomial required some changes to get around
the assumpion that (x * x) == x.pow(2), which is obviously not
true for intervals.

Fixes #241.
fix bug with PolyDense#apply
fix test properties
Merge remote-tracking branch 'origin/master' into topic/random-take3