added Token.eq, equality test ignoring info field
refactored lexer to use readers and streams

See the following blog posts for a general overview of this technique:

http://spacemanaki.com/blog/2013/08/31/Polymorphic-streams-in-ML/
http://spacemanaki.com/blog/2013/09/09/Lexical-analysis-with-readers-and-streams-in-ML/

The implementation here is slightly more complicated, embedding the
position (column and line number) inside the streams, but the idea is
basically the same.