few things:

* improved docstrings
* removed required methods for subclasses to implement
* an iterator is now passed in instead of constructed
* workflow is determined up front, so functions dependent on options are
    now actually completely avoided
* function priority can be assigned