Implements the Completor interface to provide competions for
GroovyShell by tokenizing the buffer and invoking other classes depending on the tokens found.
In order to modify JLine Behavior, we need to wrap the IO streams so we can hack into them
This allows autoindent and redisplaying the chars typed so far after exceptions during completion