fetch inbound data on demand to speedup and fix inbound bisection

This is an attempt to download inbound data in a lazy way.
This way if the lower bound is not needed for example, the higher may use the full range.
If we have a self.window_range of 4 (the default) and range_min is empty, range_max would have contained only at max 4 items to be fetched instead of 8 - I wanted to optimize the number downloaded here if one or the other of the limit were not required.

Maybe it is confusing because of the name: self.window_range is actually in all this patch half the range.