Refactor the compilers out of libart.

This builds three separate compilers and dynamically links with the right one
at runtime.

Change-Id: I59d22b9884f41de733c09f97e29ee290236d5f4b
diff --git a/src/thread_list.cc b/src/thread_list.cc
index e780e2c..b2cf676 100644
--- a/src/thread_list.cc
+++ b/src/thread_list.cc
@@ -19,6 +19,7 @@
 #include <unistd.h>
 
 #include "debugger.h"
+#include "scoped_heap_lock.h"
 
 namespace art {
 
@@ -458,8 +459,9 @@
   // started, we wait until it's over. Which means that if there's now another GC pending, our
   // suspend count is non-zero, so switching to the runnable state will suspend us.
   // TODO: find a better solution!
-  Heap::Lock();
-  Heap::Unlock();
+  {
+    ScopedHeapLock heap_lock;
+  }
   self->SetState(Thread::kRunnable);
 }