dumpReachableFrom improvements

- Rename showCells => shownCells

- Don't compile in release builds. Due to the use of <iostream> a lot of
  code is generated for this simple looking function.

- Use std::unordered_set instead of std::set for shownCells. We don't
  need ordering and an unordered set is more efficient for the
  operations we want to perform.
Support for runtime created record-like classes

- Add dataIsInline to RecordLike constructors

  This makes it possible to sanely generate RecordLike values from the
  runtime. Before the dataIsInline member would just be uninitialized
  which will crash the GC

- Add RecordLikeCell::registerRuntimeRecordClass()
  This allows the runtime to create its own procedures with closures
  referencing GC managed cells. This is completely transparent to the
  GC itself.

- Add RecordLikeCell::allocateRecordData() that wraps the malloc() that
  was previously in core/recorddata.cpp. Update recorddata.cpp to call
  allocateRecordData() instead

- Add protected setRecordData() function to allow setting the
  appropriate record data pointer.

- Add unit test for record-like garbage collection based on the runtime
  RecordLikeClass support