ScrollView: Don't waste effort in allocateVisible

It was running nearly every frame, even though there was no work to do
most of the time, even while scrolling fairly quickly.

Now it only runs if the range of visible rows has changed since the last
run.