Add some safeguards around how we dismiss completion sessions to make it work better with VsVim insert mode
Bunch of improvements to plain-text completion:
- Better detection of language provider sessions
- New code to try to avoid the "double completion" presenter
- Better detection of the applicableTo span so that we don't remove any
  leading non-text chars when committing a session
- Handle properly the case where the session is started while the caret
  is in a virtual position