Merge performance-improvements: Avoid a lot of work that doesn't need to be done so often, especially when not using viewports

Added _layout_changing method to replace _changing where we do not need to re-diff and markup the entire text (e.g. scroll or resize)

Stop additional-highlights test from failing for silly reasons

Added tests for the split of _layout_changed

Keep canvases in sync with editor when scrolling or resizing regardless of autoupdate value
(it doesn't sound like it should have any effect on anything other than the diffing of the editor content)

Avoid errors when resize is somehow called before any diffing is done (ignoring the call as it can't do anything useful)

Found out how to trigger scroll events synchronously for the tests

Treat any changes that overlap the viewport on the right or left as being in the viewport (so large changes that extend past the boundaries are still rendered)

Do not re-markup on scroll when viewport is off (making it unecessary)

Removed explicit scroll signals as scrollIntoView already triggers the events, just asynchronously

Remove need for _set_top_offset by using local coordinates

Remove need for recalculating offsets on scroll, and redraw synchronously on scroll (to allow canvases to scroll with editor)