C89 compatibility

- no comma at end of enum list
- no declarations after statements (MSVC chokes on this)
- no pointer casts in constant (case) expressions
- no empty aggregate initialisers { }
- no variable length arrays (util.c pointlessly had one)

Also,
- explicity initialise a variable in ti_tdn.c to make flow-sensitive
  interprocedural static analysers happy (since bug() may return)
use CString where possible