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/java_lang_System.cc b/src/java_lang_System.cc
index b48cee9..22a9cc6 100644
--- a/src/java_lang_System.cc
+++ b/src/java_lang_System.cc
@@ -192,7 +192,7 @@
     // Yes. Bulk copy.
     COMPILE_ASSERT(sizeof(width) == sizeof(uint32_t), move32_assumes_Object_references_are_32_bit);
     move32(dstBytes + dstPos * width, srcBytes + srcPos * width, length * width);
-    Heap::WriteBarrierArray(dstArray, dstPos, length);
+    Runtime::Current()->GetHeap()->WriteBarrierArray(dstArray, dstPos, length);
     return;
   }
 
@@ -233,7 +233,7 @@
     }
   }
 
-  Heap::WriteBarrierArray(dstArray, dstPos, length);
+  Runtime::Current()->GetHeap()->WriteBarrierArray(dstArray, dstPos, length);
   if (i != length) {
     std::string actualSrcType(PrettyTypeOf(o));
     std::string dstType(PrettyTypeOf(dstArray));