Add AnalysisResult and Finding classes.

The AnalysisResult class is intended to hold the results of the analysis
phases (lexicalic, syntactic and semantic analysis).

In order to allow for a "pull parser" model where the parser starts
before the lexer has finished, the results and the findings list are
implemented as Streams.

There is a lazy val success that invokes a callback. This callback
should advance the analysis to a point where the success of the phase
can be determined.

The findings are supposed to be subclasses of the abstract Finding
class. They can take parameters and can output a description of the
finding.
As noted, this is intended to be subclassed, like so:

```
class UnexpectedTokenError(val line: Int, val char: Int, val token: String) extends Finding(line, char) {
  override def toString = super.toString() + s": Unexpected token $token"
}
```