Switch the representation to make the API way simpler

Sorry for the huge amount of changes. Let me know if anything looks weird at all!

This version just implements the StdGen Generator from Haskell's System.Random. It can be extended if you implement a new version of `Generator`, but I did not expose that type in this PR.

I realized today that the previous API was trying to do the explicit record passing style of typeclasses. This sort of made it clear to me that the type system probably needs to be more expressive to do that well. Or at least, we need to do some experiments with this idea more and figure out some limits and conventions.

Note: I no longer think that this is less expressive than the Haskell library.