Changed from stack based iterative implementation to recursive as it is
much faster.

Due to recursive implementation we now can also tell from which vertex
we came when visiting a new one. Changed the dfs extended visitor to
provide that information.