Work Till Week3

This pull request has the following things 
1. UndirectedGraphs - This has been extended from nx.Graph to include functionalities which will be used in both MarkovModel and JunctionTrees. Also graph algorithms which are not a part of MarkovModels belong here.
2. MarkovModels - The entire infrastructure of MarkovModels and a few algorithms.
3. JunctionTrees - This is a very new module and includes very few functionalities. This is being built up right now and will be developed more.

PEP has been followed fully. And I have written the test_cases for most of the functionalities included.
Can be done in a single line with `self.marginalize(set(self.get_variables()) - set(vars))`