Version two of graph traversals

The first version turned out to be not flexible enough to
easily implement some important graph traversal algorithms,
so we have a new version now.  The main difference is the
addition of {Order}{Direction}GraphTraversal templates that
advance in smaller steps.