Prepr: implement include file support
Preprocessor: generate extra spaces between tokens if needed

If twp consecutive tokens can be misinterpreted as another,
generate an extra space between them. For example:
+BAD(=)

Should produce
+ =
pp/SearchPathFactory: cache resolved include files
SearchPathFactory: fix crash if curDir == null
PPLexer: decode the contents of string/char

Until now we only stored the literal and postponed the decoding
of escapes, etc, until the C lexer. However, it is more practical
to do it in PPLexer. It enables better error messages (exact position
instead of character offset). It also allows us to use the values
directly in the preprocessor when we need them,
Types: define INTMAX_T and UINTMAX_T
Types: add minReal/maxReal for floating point types
PPLexer: parse numeric constants
Prepr: improve the error message for hex decimal after #line
Constant: remove the requirement that SHR/SHL right param must be UINT
Constant: implement IntC:and/or/xor/not, ArithC.neg
Constant: implement static method convert()
Types: implement integerPromotion() and usualArithmeticConversions()
PPDefs[Token]: add assertions for m_code in some extraction methods
PPLexer: report prefixed strings/chars, since they are not supported yet
Prepr: check for too many nested includes
Prepr,PPLexer: discard whole lines in false conditionals

When we are after '#if 0', we don't need to parse every token in the
discarded line. We just want to skip the whole line as fast as possible,
while also handling comments.
Prepr: implement #if expression parsing