VM: split length_t and id_t from word_t; refactor anything that uses them
VM: generate pointer maps for Meta and Package
VM: make the location of block "length" fields configurable

- This removes the need for custom sizes for Free, Stack, and
  Function.
- Length can either be 32-bit or word-sized.
VM: wrap pointer members in new Ptr class
VM: check for overflow on string concatentation
VM: remove remaining -inl.h headers
VM: remove unused List and Map classes
VM: replace static cast functions with single template
VM: add release configuration
VM: move package loading functions into new class, PackageLoader
VM: restrict allocation to when it is known to be safe

- Allocation may trigger garbage collection, so we should only perform
  allocation when we know the stack is in a state where it can be
  scanned.
- Functions have stack pointer maps for certain pc offsets (allocation
  points and function calls). So we generally need to check that we
  are at one of these points before enabling allocation.
VM: handlify creation of StackPointerMaps
VM: reimplement block printing using std::ostream
VM: Support for a simple mark-sweep garbage collector

Also deleted RememberedSet. It will be used (much) later for a
compacting collector. It probably doesn't satisfy whatever the future
requirements are, so just get rid of it for now.
compiler: fix bug when capturing `this`
Merge branch 'vm-refactor'