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).
1. I don't want to hold on the waiting nodes queue also the previous node on the path, because we don't need in most cases. Thus, I only know the parent node when adding a node to the queue (not when visiting the node).

Now think of DFS.  When I add a node to the queue, I don't know yet if the parent node that adds it, will be parent on the path, on which the node is visited. Because, some other parent node can add it to the beginning of the queue. So I keep track of the last parent node that adds the node to the queue. When I visit the node I just forbid any modifications of this parent node.