Tarjan's strongly connected component and Shortest Cycle finder algorithm

@see http://stackoverflow.com/questions/10456935/graph-how-to-find-minimum-directed-cycle-minimum-total-weight
@see http://stones333.blogspot.fr/2013/12/find-cycles-in-directed-graph-dag.html

May BC, changed some exception throwing behavior inside edge and graph cloning behaviors.
Looks like this is class and its tests is independent of the other changes? If so, would you care to make this a separate PR?

New algorithms are very much appreciated, keeping them separated helps reviewing the changes and will get things in a lot easier :+1: