Handle invalid tokens, report preprocessor errors and warnings

Invalid token contains expectedType attribute, so that it can be used
as valid token to enable Parser to continue parsing file, but
it usually ends up with syntax error (e.g. semicolon is a part of
unterminated string).

Error is reported in the same way as other preprocessor errors
(calling appropriate listener method).
Add path to file attribute in IncludeDirective

When file cannot be found path is Optional.absent().