Add a C++ implementation of the hawick_circuits algorithm.

I am currently writing a program to detect resource deadlocks in multithreaded applications. In the process of doing so, I found myself in need of an efficient way to find all the cycles in a directed multigraph. I implemented the hawick_circuits algorithm and added my code to your test suite.

With proper optimizations enabled, this C++ implementation is a real speed devil, finding 1M cycles/sec on average!

Thanks for your work; you saved me a great deal of time and hassle.

Note: The algorithm was proposed for inclusion in Boost.Graph. If it is accepted, I will remove it from `d2` and update the test suite to require Boost only. You might want to wait for this before merging this pull request.