preproc: implement concatenation operator '##'
preproc: implement #if and #elif.
preprocessor: Implement -Wundef.
create some builtin defines
preproc: implement recursive macro calls

We do it by using a stack for the current expansion state and another
stack for the call argument assignments
preproc: add_define_string; parameter to mark std defines
preproc: warn when re-/undefinig builtin macros
rework creation of builtin macros
preproc: introduce new preprocessor token parsing mode

This mode is triggered by setting stop_at_newline, in this mode token
parsing will not cross newlines when parsing, but return a newline token
instead. This simplifies preprocessing directive parsing and fixes
preproctest/if.c.
add missing preprocessor help entries
preproc: implement ## # corner case
preproc: small style cleanups
preproc: support recursive macro expansion in macro parameters
preproc: whitespace before the first token of a #define does not count
preproc: change skip_whitespace() to not affect global whitespace_info
preproc: add token flags bitset; make space_before a flag
preproc: fix state management in recursive macro expansions
preproc: identifiers which did not recursively expand once never will

C spec 6.10.3.4 demands this
preproc: rework input handling
add a set of compiler-provided-headers

newer libc leave some bits like float.h/stdarg.h to the compiler which
is expected to bring an own version of these headers.