Add builtin.h with lots more gcc predefines
cpp: Rewrite directive parsing

* In order to support skipping invalid directives in #if 0 blocks,
  directive parsing is now done during cppMain() instead of as a
  separate cppDirectives() step.

* No more TK_PP*, the CPP will check for TK_HASH at BOL and with
  expansionlevel = 0 where needed, and also preserve the full
  tokens of #define and #include directives for the C parser.
* tkSetAst()/tkGetAst() removed
* tkFold() removed
cpp: Support #pragma GCC system_header