Add C generator support for variadic functions

This relies on some nasty tricks:
* On x86_64 (even LP32), vararg ints are 64-bit and vararg floats are
  doubles. They're also passed in separate registers, so the ordering
  can be mutated without breaking the call, e.g.

  void foo(int, ...);

  // These are equivalent:
  foo("ididid", i1, d1, i2, d2, i3, d3);
  foo("ididid", i1, i2, i3, d1, d2, d3);

  This allows us to avoid the combinatorial explosion of having to put
  the correct argument in the correct place, (the example above has 2**6
  possibilities for 6 arguments, whereas reordering reduces that to 7
  possibilities).

* on LP32 (x86_32, pnacl, ARM?), vararg doubles are passed on the stack,
  so we can pass two integers with the same bit pattern instead, e.g.

  void foo(int, ...);

  // These are equivalent:
  foo("id", 140, 3.5);
  foo("id", 140, 0, 0x400c0000);

  Again, this avoids the combinatorial explosion.
Fix bug when returning const void* from a function
Compilation fix for incomplete arrays.
Hack fix to define qualified types only once

This is showing me that the type stuff in bin/gen.py needs to be
rewritten...
Refactor cindex type handling in bin/gen.py

There is now a set of parallel classes to match the cindex ones. The
biggest difference is that qualified types are handled properly.