Refactor/graph and runners

Lots of stuff changed.

- Using networkx for the DAG in place of old custom classes.
- Fixed issue with doubly-connected steps.
- Task types differentiated by class.
- A pipeline run is a Job. Jobs break into Tasks. Still using WrapperJob DTO (one's task is another's job).
- Simple scheduler interface (and pop-and-run implementation, hah).
- No more initial/mid/final roles. May make it harder to do path transforms (currently doing it badly).

Still need to move/rename some classes and files, but worth it to merge early, methinks.