Forward chaining with `then_find_first`

"Chaining" refers to changing the result of a date iteration before the
result is returned. Any number of chains can be added, they will be
sequentially applied.

The chain methods are test-first. If the previous chain result is valid
according to the next chain, nothing happens and control is passed onto
the next chain.

Other changes:

- Generators are now superclasses and not modules.
  Experimental, but I find this syntax to be less verbose and more
  intuitive.
- Removed unnecessary delegation from `Upcoming` module.
- Removed unnecessary "day" generator.
- Code cleanup.