Improved traversers

Added abstract class QueueBasedTraverser holds general logic for most
traversers.
Fixed errors in InfoKeepers.
Added InfoKeeper that uses IntToBoolean fastutil map to store Boolean
values.
Changed BreadthFirstTraverser so that first node is the node we start
traverse from (to be consistent with other traversals).
Not sure if PathLengthTracker is interesting. What is definitely interesting for DFS is 'finish time' (see above two references) which seems to me to be a bit hard to record in this logic because currently 'v' is dequeued as soon as it is visited (see the code in QueueBasedTraverser's next()). What we should do in DFS is to not dequeue 'v' when we process it (i.e., in next()), but only in findNextNodeToVisit(). Then the time we first dequeue a node is its finish time. Does that seem right?