first part of Benoît Vaugon's format-gadts patch

After applying this patch, you should run:

  make library-cross
  make promote-cross
  make partialclean
  make ocamlc ocamllex ocamltools

and then immediately apply the following patches until the "second
part of Benoît Vaugon's format+gadts patch"; the bootstrap cycle is
not finished yet.
convert Benoît's first patch to bytes/string
update Benoît's patch wrt. Parsetree changes
second part of Benoît Vaugon's format+gadts patch

To finish the bootstrap cycle, run:

  make library-cross
  make promote
  make partialclean
  make core

  make library-cross
  make promote-cross
  make partialclean
  make ocamlc ocamllex ocamltools

  make library-cross
  make promote
  make partialclean
  make core
  make compare
sync threads/pervasives.ml
temporarily remove %(%) to avoid weaker typing
bootstrap
sets up a 'legacy mode'

When the OCAML_LEGACY_FORMAT environment variable is set, the compiler
will try to emulate the behaviour of the previous implementation of
format.
[legacy] some benine meaningless formats were previously ignored
[legacy] disable incompatible flags in legacy mode
[legacy] ignore more incompatible flags
[legacy] allows some more ignored formats
bootstrap
when passed to Printf, %l%n%L should be interepreted as %u, not %d
a testsuite to measure format behavior changes and the effectiveness of legacy mode
Add support for ignored scan_get_counter formats (%_[nlNL])
temporary bootstrap (%_[nlNL] not yet in the typer)
add typer support for the new formats
finish %_[nlNL] bootstrap
testsuite for %_[nNlL]