* After truncation we must rewind in the caller, because vformatstr takes at
  least the formatting spec and possibly parameter values from the va_list
  before deciding whether there's enough room.

* Let's decide that vformatstr's 'taken' return value always includes whole
  fields, ie. including format spec, format parameters and the value.

* Therefore we must update 'taken' only after fully processing a field,
  either by ignoring it due to the skipargs parameter, or by outputting it.

* While skipping, vformatstr must parse type argument in order to take
  the correct argument type from the va_list; it must even parse the parameters
  so that the list stays synchronised.

* A va_copy before each field is unattractive, because it may malloc and copy 
  lots of stuff.

==

* Voor decimale conversie gebruiken we een enkele variabele van het grootst
  beschikbare type (64 of 32 bits); signed/unsigned is een vlagje, we eisen 2's
  complement. 

  Dus:

  int convtype, signed;
  union {
  	uint64_t i;
	long double f;
	STR s;
  } val;

  Uit convtype (NONE, INT, FLOAT) blijkt welke bronvariable we moeten hebben.

