I cribbed that `try/with` idiom from `CommandUtils`, which I would dearly like to have re-used, but abstraction/encapsulation prevented me from easily doing so.

The problem is that we have no intention of completing the transaction immediately.  For it to have the desired effect, it must be passed to and completed by insert mode.  The `try/with` is just paranoia that the immediate code we are calling might throw.

In the normal case where it does not throw, we return the transaction, and then it is like a ticking time bomb for any code that runs later (like `InsertMode.OnEnter`, etc.).  If any of that code throws and prevents the disposal then all undo/redo is hosed.  But this member cannot control that code, it can only police itself for the brief time that it has ownership of the transaction.

I tried to rewrite the code to use `CommandUtil.ChangeMotion` (which ultimately does the same transaction handling) but it was too messy.