General enhancements to Gen

* Controlled determinism now supported through purescript-machines. This behavior is optional and code not using the new combinators will function as before.
* SmallCheck-style testing added for exhaustive exploration of small state spaces.
* Stack safety via trampolining of the base Gen monad.
* Many new combinators for creating Gens.
* Much more expansive test suite.
* StatCheck testing for simple testing of statistical properties.