libtopo: add support for directed graph based topologies

Review Request #2529 — Created March 13, 2020 and submitted — Latest diff uploaded


Libtopo currently only supports building topologies based on a tree structure. The problem is that not all topologies map naturally to a tree structure.

These changes extend libtopo to support building topologies that are based on directed graph structures.

Specifically, this ticket will cover adding new APIs to libtopo for the following:
- building digraphs
- iterating over graph vertices
- iterating over vertice edges
- finding all paths between an arbitrary pair of vertices
- serializing a graph-based topology to XML
- deserialzing a graph-based topology from XML

See the testing notes in the ticket: