refactored subgraph_needed_for to only use networkx to get ancestors and descendants in a smart way
make sure that iter_tasks is using UniqueOrderedLists in the right way
changed order of deterministic-example to be consistent with how algorithm works