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.

What do you think about changing this code to

    if (!arraysTriviallyEqual(messagePrefix, expecteds, actuals)) {
      assertElementsEqual(messagePrefix, comparisonHelper);
    }