symb: Solve out symbDelKeyword(), use symbFreeSymbol() directly
#undef: Remove symbols from hashtb instead of really deleting

(closes feature-requests:#94)

#undef (and Option NoKeyWord) deleted the FBSYMBOLs corresponding to the
given identifiers, which could easily corrupt the internal data structures,
for example dangling FBSYMBOL pointers in the AST, if these symbols were
already in use somewhere (not necessarily visible in user's code).

To fix this, this patch changes #undef and Option NoKeyWord to only remove
the symbols from their hash tables, thus they cannot be looked up anymore,
instead of fully deleting them.

This has various implications:

- #undef'ing symbols no longer removes them the generated program
  (for example, local variables will use up stack space despite being
  #undef'ed)

  I think that's ok, because if the variable is used somewhere, then stack
  *shouldn't* be freed up, as its still needed at runtime. If the variable
  was only used in #ifdef checks or similar, then a #define would have
  been the better choice.

- #undef'ing no longer frees up the memory used for the FBSYMBOL etc.,
  which could be a problem when using lots of #defines and #undef'ing them
  again, as they'd all be preserved in the symbol table, and the compiler
  could run out of memory eventually.

  I think that's ok too, because it'd take a *lot* of #defines and
  corresponding #undefs to make the compiler run out of memory. Of course
  with some kind of PP code generation loop it'd be possible quite easily,
  but for other symbols besides #defines it shouldn't be a noticable issue.

  Perhaps the memory usage problem can be addressed in the future, but I
  think correct behaviour is more important for now.