Record scroll position in dispatch to support alternative batch strategies

Recording scroll position in dispatch method is necessary for clients using alternative batching strategies, such as [react-raf-batching](https://github.com/petehunt/react-raf-batching).

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.

This also happens if you don't immediately `render` inside `Router.run` callback for some reason.

This fix records scroll position while it's “fresh”.

Also, don't record position for `REPLACE` action since there is no way to get back to it.