Smooth scrolling via requestAnimationFrame

This is a follow-on to #1229 which uses `requestAnimationFrame` instead of `setInterval`.

This gives me a slight performance improvement on my machine, and the scrolling speed now feels closer to Chrome's native implementation. @smblott-github, do you have any thoughts on this?
(I was going to do this myself, but...)

`isRendered` should probably now be refactored into `isScrollAllowed` (which might then need a new name).  We should have just *one place* where we decided whether it is appropriate to scroll and element.