Reconstruct shortest path "trees" (BFS/Dijkstra) and traversal graphs (DFS)

Everything we needed for #36 was already there (namely the predecessors), we just had to put things in the right place.

We introduce a `TraversalGraph<V, E>` class, which is just a JGraphT `SimpleDirectedGraph` with a root vertex. We use this to model shortest path "trees" (SPTs) for BFS/Dijkstra (we allow multiple shortest paths if they exist) and traversal graphs for DFS.

The SPT is reconstructed iff the user calls `GraphSearchAlgorithm#reconstructTraversalGraph()`. The root of the SPT is the last vertex `GraphSearchAlgorithm#calculate` was called on.

Fixes #36.