Cut Vertices and Bridges with unit tests

during implementation I found a bug in CompleteGraph.

the problem was, that I couldn't do something like:
*(graph.edgesFromVertexBegin(v) + (buffer.next_out_arc_[v] - graph.verticesFromVertexBegin(v)))

to get an edge corresponding to some vertex 'next_out_arc_[v]'
I have to use instead a variable:
typename GRAPH::EdgeIterator e = graph.edgesFromVertexBegin(v) + (buffer.next_out_arc_[v] - graph.verticesFromVertexBegin(v));

the problem, is that EdgeIterator and VertexIterator are derived from AdjacencyIterator, and the latter defines all basic iterations abstractly returning AdjacencyIterator instead of concrete iterator type.
This also makes the following code compilable:

CompleteGraph<> graph(5);
CompleteGraph<>::EdgeIterator e = graph.verticesFromVertexBegin(0) + (graph.edgesFromVertexEnd(0) - graph.verticesFromVertexBegin(0) - 1);

So, it is totally not type safe.

To fix this we can use curiously recurring template pattern, making AdjacencyIterator aware of the inherited classes.