heavy modification of Gen's API. Now the default 'a Gen.t is a transient, consumable generator
of 'a, and 'a Gen.Restart.t can be used for restartable generators.