preproc: only emit newlines if the original token was at line begin

This makes the output a bit more clang/gcc like.
preproc: implement concatenation operator '##'
preproc: implement #if and #elif.
preprocessor: Implement -Wundef.
create some builtin defines
preproc: initial implementation of __LINE__ and __FILE__
preproc: fix obscure cases for defined.

HERE BE DRAGONS.
DO NOT ASK.
CONTENTS MAY BE HOT.
SLIPPERY WHEN WET.
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

TODO: __FILE__, __LINE__, etc. need to be defined as a pp_definition_t
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