Adding shrinking to each generator

TODOs:
- create an interface for Generators. they should have a `func Close()` and a `func Closed() bool`
- plain generators and shrinkers should implement `Generator`
- create functions in `Generate` to create shrinkers