Record scroll position in dispatch

Recording scroll position in dispatch method is necessary for clients using alternative batching strategies, such as react-raf-batching[1].
With an alternative batching strategy, by the time componentWillUpdate is called, browser may have tried to restore position itself (not always correctly), and the recorded position is thus wrong.

Also, don't record position for REPLACE action since there is no way to get back to it.

[1]: https://github.com/petehunt/react-raf-batching
Merge pull request #524 from gaearon/record-scroll-asap

Record scroll position in dispatch to support alternative batch strategies