Fix #642: Refactor how store observers are pruned.

It appears in the old code, `removeDistantNodes` would leave an observer behind if all the rows being removed referenced the same observer.  

I moved the observer pruning code into the `removeRow` function.  The code now looks on either side of the row node to figure out if it is the last to reference an observer.  This works without needing to know the scroll direction and it works if removeRow is called from anywhere and removes the last row from a query results.