Rename Graph to DiGraph

* From now on, Graph will mean 'Undirected Graph'
Add Undirected Graph implementation

* Define simple, undirected graph struct and functions
* Add unit test for all Graph functions
* TODO: Create a common interface between Graph and DiGraph
Merge Graph and DiGraph in the same struct

* Use Directed attribute to determine the nature of the Graph
* Update search algorithms to take Graphs
* Add mandatory weight attribute to Edge