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 /*
    ^
```
What if a source file contains the EOF char? Technically we should abort with an error. Do we have a test for that?