Resolved bug#83 && new version of is_active_trail && is_iequivalent implementation

Hello,
1. I think this was a minor bug because of which is_active_trail was not working. Basically when observed was None, then it was being added to the list of observed variables.
2. I have implemented a more efficient version of is_active_trail when the end node is given. Earlier all active nodes were returned by the function active_trail_nodes and out is_active_trail was just checking if the end-node was in it. Now I have changed this to break the function on finding the end_node on the search-tree starting from the start node.
I had one doubt about this however. I don't like the fact that function of active_trail_nodes had to be almost copied to is_active_trail. So one thing which I could have done is changed active_trail_nodes to return a list when the end-node was not specified and return a True/False when the end-node was specified. However such a structure looks really bad to me, having programmed mostly in C++. However this feature is perhaps what lends power to python. Which implementation do you recommend?
3. I also felt the comment was inappropriate and not in line with the algorithm. So I changed it.
4. With reference to 2, I have merged the two functions into 1, and the function is_active_trail now returns the active_nodes in a list if the end-node is None
5. I implemented the is_iequivalent method.  The current algorithm is linear in the graph size currently. I have also documented the method
6. I had a few doubts regarding this. So I had all the test_cases in a separate python file. However for documentation, I needed the examples and hence I had to copy-paste the code and add ">>>" everywhere. Is there an automated way for that?
Also, should I also include those examples in a test_is_iequivalent method as a test_routine?