Added identifier cache.

Identifiers are now cached for faster comparison. Note that the equal's
method of case classes will first check for reference equality, so
Identifier.equals doesn't have to be overwritten.
Lexer: Replace Stream input with custom line-based mutable input reader
Lexer: Inline lexSymbol into lexToken to make them tail recursive
Eliminate any sources of buffering the whole program

* replace Streams with Iterators
* findings and success are now dependent on the current iterator position
  * therefore have to rearrange evaluation in unit tests
* make Lexer.dumpResults() lazy line-based