Use blocker to find match ( to ).

Otherwise we go wrong when nested parens intervene.
Add willInvoke/didInvoke hooks for fns.

This allows minor modes, or other busybodies to intervene before or after a fn
is completed.

This is particularly useful when an entity wants to respond to buffer edits
with more buffer edits. It's not allowed to mutate the buffer while responding
to Buffer.edited (for various reasons, but not least because you may be in the
middle of the notification chain and we want to tell everyone about the current
edit before some crazy fool goes and makes more edits).

So a nice approach is to listen for buffer edits, make a note of what you need
to do, and then in a didInvoke hook actually perform those edits. That way your
additional edits get grouped together with the edits made by the fn (which
triggered your edits), so everything will be undone together if the user
chooses to undo. But your edits also happen separately from the original edits,
so sanity can be preserved when telling people about edits.

This approach does require keeping some mutable state, but worse things have
happened at sea. If you are totally allergic to mutable state, you can instead
register one-shot didInvoke callbacks to handle just what you care about.
Revamp trailing whitespace trimming using didInvoke.

See previous commit for why this is good and proper.
Report the cause of choking if undo fails.

We strive for zero failures, but until we reach that utopia of code perfection,
we need the infos to figure out what went wrong when things do fail.