Tokenize Completion
For each input, parse and tokenize the current line and we can then write a syntax to determine current state and figure out what completer to use for the current line. This will also help us handle quotes and other special characters.