More specific error reporting

Changed lexer and exception so that it is able to accept additional parameters:
- The token that caused the exception
- The line in the original string that contained the erroneous token
- The character position within that line where the token can be found