compiler: Ensure closure/record fields are stable

- Make closure calculation always use a well-defined order for its
  closure variables

- Add a test to ensure that we preserve field order when packing a
  record-like. This was already true but a test will make sure this
  doesn't break in the future
compiler: Make IR output stable across runs

This makes the GC barrier and value phi'ing code order their operations
based on IR values' names and GC slot numbers. Add a unit test that
compiles the R7RS Life example four times and ensures the output is the
same every time.

Closes #22