Change Class::component_type_ and implement reflect.Array

Change-Id: I9e06f31577551c738eca2621146c8d2328119442
diff --git a/src/java_lang_System.cc b/src/java_lang_System.cc
index fc13839..4eaaa66 100644
--- a/src/java_lang_System.cc
+++ b/src/java_lang_System.cc
@@ -182,10 +182,10 @@
   }
 
   // Neither class is primitive. Are the types trivially compatible?
-  const int width = sizeof(Object*);
-  bool sameDimensions = srcArray->GetClass()->GetArrayRank() == dstArray->GetClass()->GetArrayRank();
-  if (sameDimensions && srcComponentType->InstanceOf(dstComponentType)) {
+  const size_t width = sizeof(Object*);
+  if (dstComponentType->IsAssignableFrom(srcComponentType)) {
     // Yes. Bulk copy.
+    DCHECK_EQ(width, sizeof(uint32_t));
     move32(dstBytes + dstPos * width, srcBytes + srcPos * width, length * width);
     Heap::WriteBarrier(dstArray);
     return;