# Functions
New initiates a new Graph.
NewLabeledGraph initializes a LabeledGraph with specified vertices and set the status of each vertex to unvisited.
TopologicalOrder determines whether the directed graph is acyclic, and if so then finds a topological-order, or a linear order, of the vertices.
# Structs
Edge represents one edge of a directed graph.
Graph represents a directed graph.
LabeledGraph extends a generic Graph by associating a label (or status) with each vertex.
TopologicalSorter ranks vertices using Kahn's algorithm: https://en.wikipedia.org/wiki/Topological_sorting#Kahn's_algorithm However, if two vertices can be scheduled in parallel then the same rank is returned.