Fix for #803: make clearer *which* nested arrays have unequal length.

This is an implementation of the suggestion made in #803. Please note that the two new unit tests may make obsolete part of (but certainly not all of) PR #804.
Calling `fail()` throws an `AssertionError`, so you'll get a confusing error message if we ever get here. When testing code that should throw an `AssertionError` it's best to use this pattern:

    try {
        callThatShouldThrowAssertionError();
    } catch (AssertionError expected) {
        // optional: make assertions on expected here
        return;
    }
    fail("Expected AssertionError to be thrown");