Smooth scroll; move doScrollBy to it's own object.

The main reason for doing this is so that we can add the (now)
CoreScroller callbacks to the handler stack earlier, and therefore track
@keyIsDown correctly at startup, while also keeping local state local.