In principle, I think that when `OnEnter` runs, we should be in the new mode.  If for some reason we need to know what the old mode was, it should be passed in the event arguments.

But practically speaking, I needed a place to call `EnsureAtCaret ViewFlags.VirtualEdit` that would obey the fact that we are not in any visual or select mode and `virtualedit=onemore` is not in effect, and so move the cursor back to the end of the current line if possible.

I couldn't make that call from `SelectMode.Process` even though we know the mode is switching, because it isn't yet in the new mode.  I couldn't even make that call from `NormalMode.OnEnter` because it **still** wasn't in normal mode when that handler was called.  There was no place where we could says:

* If we are entering normal mode _and_
* Various other conditions are true _then_
* Move the cursor back

that we were actually **in** normal mode.

We could of course check that we are going to normal mode when we are leaving select mode but that is not good because:

* It doesn't address the same problem coming from visual mode
* It embeds logic specific to normal mode into select mode
* It cannot reuse the existing `EnsureAtCaret` method but has to manually do the same checks and operations without using the current mode

If we really need to execute in `NormalMode` and yet still "be in the previous mode", then we need two events:

* `OnBeforeEnter`
* `OnAfterEnter`

But I cannot think of any good reason for anyone to ever need `OnBeforeEnter` at this time.  Anybody who cares what the mode is in `OnEnter` should expect the mode to be the mode "this" mode, not the previous mode.