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?