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.
Would you care to elaborate what this change is needed for?

Semantically this makes it a "remove edge if it exists" method and I'd rather keep this code explicitly say "remove edge or fail". Besides, adding a boolean parameter looks like a [boolean trap](https://www.google.com/search?q=boolean+trap) to me.