Implement the lexer

Since it's pretty much my first non-trivial piece of Scala code, more than one person may want to review this...

Fixes #19.
Maybe use `BooleanType.literal -> BooleanType` to avoid having the literal in two places. Then you also could use a `List[TokenData]` and create the map like with `constLenTokens`.