Refactored UndirectedGraph to use the new Node class, as well as Edges.
This allowed the GraphBuilder to work with Nodes as well.
Removed UndirectedNode class.
Extracted Graph abstract class with common functionality between the 
UndirectedGraph and DirectedGraph.