Range scanner which iterates over ranges and adds them to queues.

Next step will be implementation of rangeIterator, integration with
Store, and creation of first actual rangeQueue implementation. Will
probably do garbage collection.
If there's nothing left, we return 0. If there's one left, we return 1. If there're two left, we return 2. It seems weirder to return 0 when there's nothing left and also 0 when there's one left (the one we're returning).

Why the bool in (*Range, bool)? Do you dislike returning nil for end of iteration? Will change to do a separate EstimatedCount() int.

Will also change to unexported methods.