Updating interface for lexer.

* Instead of having the constructor do all the work (which could throw),
we have a default constructor and a static method that takes a file and will deal with errors

* Instead of having just a "next" that returns the token and (what i assumed) removes it, we have a queue like interface