Turn -rename*/-remove*/-typedefhint/etc. into global options

It doesn't really seem very useful to make them version-specific.
If we're renaming or removing a symbol, it's like going to be needed in
all versions. Or maybe it's only needed for one version, and is a no-op
for the others. Either way, this simplifies the code a bit and makes
fbfrog.bas:hApplyOptions() unnecessary, which was rather ugly (and slow).
cpp: Ensure filterout flags are only affect whole constructs

This ensures we're never going to filter out constructs partially (e.g.
a single param of a procdecl or a field in a strutc), which is generally
bad, because it easily goes unnoticed but breaks the ABI.

Also, this allows the C parsing to be simplified a bit.
c: Add symbol table

This changes the C parsing & AST build-up to use a symbol table, such that
references to identifiers are turned into references to the declaration
(a.k.a. symbol) they are referring to.

This means the AST nodes are no longer self-contained, but can
cross-reference each-other. To avoid dangling pointer problems, they're
never deallocated anymore now. Currently this causes some ugly memory
leaks, especially with the current AST merging implementation, but I'm
planning to change that too. But anyways, fbfrog shouldn't bother spending
time cleaning up...

Cross-referencing AST nodes has nice advantages though. Besides allowing
the re-use of subtrees, which has the potential to decrease total memory
usage, renaming a symbol becomes as simple as changing the identifier on
its AST node. It's no longer necessary to go through the whole AST to
update all textual references to the symbol. Overall, symbol renaming goes
from O(n^2) to O(n); this helps fbfrog performance which huge input a lot.

Testing on the entire MinGW-w64 windows.h, run time improved from 2min20sec
to 1min30sec.

Furthermore, the symbol tables (block/namespace/scope stacks) allows some
other simplifications:
* Most AST fixups such as handling array parameters or solving out certain
  typedefs can now be done in the C parser directly (since it's possible
  to lookup the ASTNODE corresponding to an id). This also means much
  less AST walking.
* Redeclarations of functions, typedefs and extern vars can now be handled
  and combined into a single one easily (some headers actually declare
  functions twice etc., while FB doesn't allow that, so it matters).
* We can generate better context-specific identifiers for anonymous
  structs/unions/enums, based on knowing the parent structs etc. and
  having context-specific dummyid-counters. This means prettier generated
  identifiers with nearly no risk of inter-binding collisions.
* Some problems with C parsing and handling of tags were fixed in the
  process
Merge branch 'symtb'

Conflicts:
	tests/cpp/guard/main.txt
c: Fix tag bodies being filtered out too early (84287e4e regression)
c: Fix symbol lookup for #defines
c: Fix handling of #defines which can't be parsed

It's not safe to just overwrite the existing PPDEFINE node and turn it into
an UNKNOWN, because it may already be referenced by SYMs. Instead, the
UNKNOWN node must be created new.
ast: Add astNewUNKNOWN() helper
c: Fix #define lookup (again)
c: Fix filtering out of TODO #defines (0b0f5c17 regression)
Don't #include clong[double].bi for code that will be filtered out

(7084ecf95363dfbe90d515c2e877eeadc532fa15 regression)
Don't reverse order of auto-added forward decls (84287e4e regression)
c: Allow params to be looked up inside proc bodies