Update scroll position directly on mousewheel events

Previously, we were updating the scrollbars and relying on an async
scroll events to fire. But updating the scrollbars is expensive, so this
updates the model directly when the next animation frame fires instead.
Measure characters in new lines when vertically scrolling stops
Give each line its own layer on the GPU