pgmpy refactor

* Both ```UndirectedGraph``` and ```DirectedGraph``` serves as an intermediate class between pure ```networkx``` graph classes and ```pgmpy``` models. All the methods that can be applied to all the *undirected graphical models* should reside in ```UndirectedGraph``` and all the methods that can be applied to all the *directed graphical models* should reside in ```DirectedGraph``` class.

* For example, ```triangulate()``` method should reside in ```UndirectedGraph``` class as any *undirected graphical model* can be triangulated.