Refactor commands & keystroke injection

 - Make `CommandTargetBase` generic to avoid GUIDS
 - Replace `SendKeys` with actual OLE Command injection for test reliability.

When creating new tests, use `VSHost.TypeString()`.  
For special characters, this function will inject the actual command instead of a `TYPECHAR`; see the half-commented-out giant `switch` block.  
To add `BACKSPACE`, use `\b`.

If a new test doesn't work, you may need to wait for another event loop before getting the text (if the command handler being tested calls `Dispatcher.InvokeAsync()`).  
To do that, call `await VSHost.Dispatcher.NextFrame(DispatcherPriority.ApplicationIdle);`

We should avoid `Thread.Sleep()` or `Task.Delay()` calls in tests where possible; it's better to deterministically wait for an operation to finish rather than guessing how long it'll take.