Issues/reader performance improvements

Closes #2938

Some of the things addressed are:
- a jump in the scroll offset when backfilling posts ends
- cell layout issues due to post indexes changing due to a save while scrolling but cached row heights were not
- estimated row heights used when cached heights should have been used.
- Also fixes an issue with the subscription vc not being released from memory. 

@astralbodies @jleandroperez Would really love to get your thoughts about how this patch defers a save operation until after scrolling has finished.   

The post list waits to refresh its layout until after scrolling ends. A consequence is when new content is saved while scrolling, NSIndexPaths can point to new content that doesn't match cached row heights. Visual oddity ensues.  Waiting to save the context until scrolling stops is the simplest, most direct approach to address this that I could think of.  Would love to entertain alternate approaches.   I tried doing something fancy with some extra parent/child contexts but it got ... overly complicated ... but maybe there is a more elegant solution.  

Lastly, #2938 targets 4.7 as a bug fix but the change here is one I'd want to test for longer so i think we'll push to 4.8. 
Thought here: is it remotely possible that this code could get triggered more than once?.

If so (say, multiple Pull to Refresh OPs), the contextForSync should get overwritten. (As a result, the app shouldn't crash, but the mainMOC wouldn't ever receive the posts that were fetched!).