Optimize assertArrayEquals()

This change avoids using reflection when calling assertArrayEquals() for all primitive types except float and double. It does increase the amount of duplication in the code, but I've tried to keep the duplicates trivial and to a minimum.

Done