Make dependency graph node class public

We're going to start making more use of it, so there's no point hiding it
away inside the Dependencies class.

Change-Id: I10c4a05493697f8834623cd798ef35161a0c219b
Make the mutable dependency graph a separate class

Rather than copying dictionaries internally, provide a separate Graph class
that can be copied externally as well.

Change-Id: Id0bd55944369da59d7da1713369fce0d73ffe814
Move deletion from dependency graph to __delitem__

Graph objects are mutable, and will in future be used for operations other
than a topological sort, so abstract out the code for deleting backlinks to
a node from the other nodes that have dependencies on it when it is
removed.

Change-Id: I86b81303ed2dffd969a2db10535761f108f4808a
Add a dependency-aware task group

Change-Id: I4524b4b220bdc02bdd7e3f9a5d84b1982cbee99f
Merge "Make dependency graph node class public"
Merge "Make the mutable dependency graph a separate class"
Merge "Move deletion from dependency graph to __delitem__"
Merge "Add a dependency-aware task group"