Refactor GC to have a class for each different type of GC.

Added a seperate files for mark sweep, partial mark sweep,
sticky mark sweep.

Added a common superclass for GC.

Added additional statistics for each GC.

Moved main garbage collection code away from Heap.cc.

Change-Id: Ida0021ab2f740fc8228bbbf4d43cd9bc56b4ba46
diff --git a/src/thread_list.cc b/src/thread_list.cc
index 2a5b6c9..a2a8fe8 100644
--- a/src/thread_list.cc
+++ b/src/thread_list.cc
@@ -153,7 +153,7 @@
 size_t ThreadList::RunCheckpoint(Closure* checkpoint_function) {
   Thread* self = Thread::Current();
   if (kIsDebugBuild) {
-    Locks::mutator_lock_->AssertNotHeld(self);
+    Locks::mutator_lock_->AssertNotExclusiveHeld(self);
     Locks::thread_list_lock_->AssertNotHeld(self);
     Locks::thread_suspend_count_lock_->AssertNotHeld(self);
     CHECK_NE(self->GetState(), kRunnable);