SizableArrayList: improve robustness of setSize

Firstly, we fix a 1.7.0_45 bug with ensureCapacity, wherein the capacity
was sometimes not *actually* ensured.

Secondly, and more generally, we are more careful when attempting to
override the private size field. If anything goes wrong overriding that
field, including being unable to successfully retrieve the new last
value using get(size - 1), we revert to the previous size and just add
the values as nulls manually. Slow, but guaranteed to work at the API
level, unlike our cute size field hack.

Bug discovered by Mark Hiner.
Fix suggested by Johannes Schindelin.
Thanks, guys.