int3/doppio — pull request #58 by jvilk (2012-11-05 19:29:16+00:00)
Title: System.arraycopy is now up-to-spec

We should now be handling all of the corner cases of ``System.arraycopy``. There is a fast path that does not need to do checks on a per-object basis, and a slow path that (unfortunately) does.

Why? Well, the following is legal (and requires the slow path):
```
Object[] objects = new Object[2];
objects[0] = "Hello!";
objects[1] = new Object();
String[] strings = new String[2];
try{
System.arraycopy(objects, 0, strings, 0, 2);
} catch (ArrayStoreException e) {
// Will be thrown when arraycopy tries to copy objects[1] over; Object cannot be promoted to String.
}
// But... strings is still mutated!
System.out.println(strings[0]);
```

That will output: ``"Hello!"``

In the fast path, all promotions are guaranteed to succeed (and all bounds checks have been performed), so you can do any performance tricks to copy over the subarray in bulk if possible.

This closes #57.