A bunch of work on keeping scopes up to date.

This is some hairy complex biz, but if I find myself doing this sort of thing
more than once, I'll factor out the core, which keeps a bunch of nested regions
up to date through arbitrary buffer edits. That's the hard part.

I still need to process newly inserted text to assign scopes to it, but the
bounds of the existing scopes are properly adjusted when insertions or
deletions happen.
An aborted attempt at rescoping inserted regions.

I think I'm going to toss this whole approach and revamp things completely,
because this is turning out to be fragile and wonky.

Having read through the TextMate source (insane amounts of incidental
complexity, yay C++), and the first-mate source (svelte and readable), I think
I'm going to tear apart the matcher tree so that I can record the matcher state
at the end of every line (like first-mate does it).

Then I can just record scopes on a line-relative basis, shift things down when
multiple lines are inserted or deleted, and re-process individual lines when
they are edited in any way.