Optimize aput-object in interpreter.

Inline ObjectArray::Set test about valid index and valid object. Adding
ObjectArray::IsValidObject method to check for ArrayStoreException and
call it from interpreter.

Change-Id: I99beeb531455049fc189f9b8e8f4f020591f7bab
diff --git a/src/mirror/object_array.h b/src/mirror/object_array.h
index 3d04b39..08a8d62 100644
--- a/src/mirror/object_array.h
+++ b/src/mirror/object_array.h
@@ -30,6 +30,10 @@
 
   T* Get(int32_t i) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
+  // Returns true if the object can be stored into the array. If not, throws
+  // an ArrayStoreException and returns false.
+  bool CheckAssignable(T* object) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+
   void Set(int32_t i, T* object) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
   // Set element without bound and element type checks, to be used in limited