First try at integrating Gc into the compiler.

We have rewritten Emit to take Gc as input language.
It compiles, but BUGS REMAIN. The main sticking points:

- The first parameter (the closure) passed to functions
  is a root in general and it should be saved and reloaded
  as necessary. However since this argument is invisible
  on the intermediate languages, there is no way to do so
  presently. This will require a re-thinking of the strategy.

- Bug: right now the terms that allocate memory (for example
  Tuple, MakeCls, etc.) evaluate the arguments _before_ allocating
  the memory. This is precisely the wrong way to do it, because
  GC could be triggered while trying to allocate memory and so the
  arguments should be reloaded after the memory is allocated. This
  should not be very hard to fix.

- Bug: gcroots that go out of scope in a non-tail position should be
  zeroed out. This is correctly done in Let's, but not in LetTuple
  yet.

Also, added a small test test/test-gc0.ml.