* Cycles are detected during dynamic graph updates.
* A new signal notifies callers when cycles occur.
* Static and dynamic graphs behave consistently when tasks fail.
* Moved graph drawing into a separate module, so callers can customize graph diagrams.
* Added graphcat.common.consume() task function, for debugging dynamic graphs.
* Made pygraphviz an optional dependency, instead of required.
* Missing optional dependencies cause runtime failures, instead of failures at import.