Switch to record representation for `Random` and try to clarify the names of the things it can do.

Not sure if the field names I chose are optimal, but I feel they are at least improved.

I also made the field types in `Generator` explicit because it will look nicer when docs are properly generated.