Add some more generators

A couple of these I wasn't sure how to port directly from Haskell, need
to figure out how to do some more monadic stuff like `sequence`.
Further, needing to wrap things in lambdas can then call them can be a
bit awkward compared to Haskell.
Shrink char, string and keyword
Refactor generators and add more tests
Merge branch 'feature/add-more-generators'