Added interfaces more abstraction to parsing

Now using two interfaces, Tokenizer and TokenParser that define the
minimum standard of behavior for any implementing subclass.
I renamed the existing tokenizer to SimpleTokenizer and the token parser
to SimpleTokenParser.
Additionally, in conformance with the single responsibility principle
the token parser only deals with parsing a list of tokens. The tokenizer
only tokenizes a string. The QueryParser now combines these two, and its
only role is doing that.