- break out the concept of "down revision" into two pieces:
down_revision and "dependencies".  For migration traversal, the downrevs
we care about are the union of these two sets.  however for location of nodes
and branch labeling, we look only at down_revsion.  this works really well
and allows us to have mutually-dependent trees that can easily be itererated
independently of each other.  docs are needed