FormatList type + reinstate C++98 support

* FormatList type to hold a list of arguments to format() in a
  type-independent way.  May become part of the public interface in
  version 2.0, as a convenient way to pass arguments to a non-template
  function.  A bit like C's va_list, but typesafe for this particular
  purpose.

* Reinstate C++98 support by simulating all variadic templates using
  macros, up to a certian number of arguments as usual.

* Some minor renaming for clarity
Kill off more disgusting implementation of FormatArg

There doesn't seem to be a really clean way to get access to what is
essentially a vtable of functions templated on the argument type.
However, we can at least kill off the more disgusting implementation
option.