Lexer: Make it fast

* Lexer: Use StreamReader instead of Stream[Char] for automatic position
  tracking
* Use Position trait throughout the program

So... after finishing the lexer, i discovered scala.util.parsing.input. I hoped the line-oriented StreamReader would speed up the lexer, which didn't happen, but the error message formatting we get for free is still pretty sweet:
```
$ java -jar target/scala-2.11/mjc.jar error.in
1.5 ERROR: unclosed comment
bla /*
    ^
```
{nit} renamt to `currentChar`?