delay auto-popup; don't show if token matches only possible completion

This PR tweaks the presentation of automatic popups a bit. We use a single timer that is re-scheduled and cancelled as necessary, and if we see more than 400ms of inactivity from the user then we go ahead with an auto-popup.

We also forego displaying the completion list if there is only one available completion and the token matches that exactly.