vm: introduced AllocationRange, Chunk, and Option classes

- Chunk will soon replace MemoryChunk.
- AllocationRange is a simple class to manage allocation from a
  contiguous range
- Option protects against using invalid values (such as null pointers)
broken refactoring with Option
VM: rip out Option, re-implement Heap using Chunk

This changes and breaks a huge number of things. Obviously not done yet.
Completely refactor handles

Now we have local and persistent handles. Local handles are faster to
create and copy but require a HandleScope to manage their lifetime and
cannot be stored in any location that outlasts the
HandleScope. Persistent handles are more flexible but are more
expensive to create.
Remove MemoryChunk
VM: precompiled prefix header
VM tests: add ASSERT_THROWS macro
VM: remove codeswitch headers from prefix.h

We don't have dependency information in the Makefile for prefix.h, so
it doesn't get recompiled if one of the headers changes. Just remove
them for now.
VM: allocation now throws AllocationError on failure
VM: fix dependency generation in Makefile
VM: refactor Block, Meta

- Moved encoding of meta word into new `MetaWord` class
- Expressed members as actual C++ data members.
- Replaced tryAllocate, allocate, initialize methods with custom new
  and constructor.
VM: add Meta::create and RETRY_WITH_GC
VM: refactor array construction
VM: refactor Package construction
VM: refactor Stack construction
VM: refactor Function construction
VM: refactor Class construction
VM: refactor Field construction
VM: refactor TypeParameter construction
VM: refactor Object construction