This uncovered three bugs:
- Unconsuming at EOF with error reporting off yielded incorrect tokens
- Mangled end tags in foreign content were not being matched correctly
- Broken characters produced a fatal error with error reporting on
Everything which can emit a parse error should have the error handler
and data stream as properties and use the ParseErrorEmitter trait to
avoid complicating the task of actually producing an error.
Normally the Parser would be expected to set the error handler before it
begins (this commit does not do this) and unset it after it's done.
Alternatively, the entire means of reporting errors can now be easily
replaced.