Fix cursor and selection positioning when changing line height, font size, and font family

In addition to fixing selection/cursor updates, this PR aims to clean up measurement and perform the minimal number of updates in response to changes that affect the line height and character width.

My goal is to centralize all decisions about measurement in the `EditorComponent` rather than scattering them through `componentDidUpdate` callbacks like they are currently. This will allow us to perform measurements when the line height, font size, and font family change without updating any components except the root component. Previously we were updating the lines component just to perform measurement, which resulting in multiple wasted update passes per change. This PR also batches the updates resulting from measurement together.