v47: Don't use inlined dvmSetObjectArrayElement() function

This function accesses ArrayObject->contents directly. However, it
seems that some vendors change this struct, leading to different
offsets between compile time and runtime. Due to this, the array
elements are written to the wrong place.

With this fix, Xposed determines the offset by comparing pointers
returned from official JNI functions and provides its own function
to set array elements, based on said offset.

It would be much easier to use the non-inlined version of the
dvmSetObjectArrayElement() function, but it isn't exported by
libdvm.so on all ROMs.