Take another stab at core completions

- Fix completion list exception (when input is empty, after being
  non-empty)
- Fix completion funcs to properly validate and detect when we're in the
  middle of a completion
- Actually use command and argument help strings
- Properly spawn InfoBox for completion info