Introduce a topological walker
This alters quite a lot making the walker more exact and working.
Consider it a redesign although the changes are small.
The unit test is performed on the TopologicalWalker since the
Walker itself is not used. It is easies to test the topological
walker since there are expectations on its exact result, whereas
the generic Walker does not have as tough outcomes.
Default is now to search all branches not just the first one. One
reason is that you will not be able to follow the development of
just the integration branch due to fast-forwards.
The collection mechanism only store ObjectId's and author times
for the sorter to save memory. Unlike the previous version all
traversed commis (i.e. their id) are saved since the sorter
needs the complete graph. The interesting commits are marked
separately and filtered when the sorter reports the final ordering.
Some pre-filtering could be done, but that would be much
more complicated and maybe even counterproductive.
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>