Create an IntelliJIDEA project
Defining type system and constants
Constant: add type conversions
Beginnings of a pre-processor
Preprocessor: char/string const, comments, punctuators
Preprocessor: macro definition
Preprocessor: very primitive macro expansion
Refactor: split pp-lexer from preprocessor, combine token classes

Split the lower level pp-lexer from the pre-processing logic.
Combine all token classes into one.
Re-integrate SourceRange into PPLexer.Token
Preprocessor: implement token lookahead and use it for func-like macro detection
pp/LineReader,PPLexer: add a sentinel byte at EOF

A '\0' sentinel byte at EOF allows us to look one character ahead in the
without a range check. If we are at EOl, the next byte will be '\n',
or if at EOF, it will be '\0'. Either way, it is safe to access it.

Furthermore, if the next character is what we expect it to be
(not '\0' or '\n'), we can safely access the one after that,
and so on.
pp/PPLexer: remove unnecessary range checking

The sentinel character added at EOF allows us to safely inspect
consecutive characters as long as none of them are '\0' or '\n'
(the sentinels).

Also fixed a bug in handling numbers.
PPLexer: combine whitespaces into a single token

This guarantees that the lookahead cannot grow beyond 2
when searching for func-like macro.
PPLexer: implement Token.toString()
Preprocessor: add simple command line parameter handling

Debug output is controlled via the command line
New class CompilerOptions to hold all options
Prepr: working on macro expansion
Prepr: implemented '##'
Prepr: implement __VA_ARGS__
Prepr: implement GCC extension to eat a comma before macro variadic args