Clean up implementation (step 2)

Built over #171

 - The generators are now unit structs
 - Turn all member functions into global functions
 - As a whole, functions are now much easier to read
 - Add a `generators::Generator` trait