Implement finalization.

Also make System.gc no longer a no-op. This replaces some of the
MemberOffsets exposed by Heap with intention-revealing functions
that we'll want to share between all the actual GC implementations,
but there's still more to be done.

Change-Id: I57ba26c0416fbbfe20142b7b6e27108684add7f9
diff --git a/src/thread.cc b/src/thread.cc
index 78c877d..90c172e 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -70,7 +70,7 @@
 static void ObjectInitFromCode(Object* o) {
   Class* c = o->GetClass();
   if (c->IsFinalizable()) {
-    o->AddFinalizerReference();
+    Heap::AddFinalizerReference(o);
   }
   /*
    * NOTE: once debugger/profiler support is added, we'll need to check