JsonDiff: factorize out null LCS node, part 1

When LCS is exhausted, special case where either the first array or second array
is empty:

* if the first array is empty, all remaining elements in the second array are
  added;
* if the second array is empty, all remaining elements in the first array are
  removed.

Now, there is the case where both are non empty.
JsonDiff: factorize out null LCS node, part 2

No idea why this happens, but given the following conditions:

* LCS is not null;
* node1 is not null, and is not equivalent to the LCS node;
* node2 is not null, and is not equivalent to the LCS node;

then indices of both node1 and node2 must be equivalent.

This is an unforeseen consequence of testing nullity of LCS node first, and has
been detected by code coverage (no tests went through the path when all three
conditions held and indices were different).

Add a precondition, which appears to always be true. Now, it is left to
understand why that is.
JsonDiff: add comment
JsonDiff: reduce number of arguments to removeRemaining()

There is no need to have the index of the second array.
JsonDiff: add another shortcut case for post LCS treatment
JsonDiff: add one condition to the "empty LCS" case
JsonDiff: remove misguided post LCS function

Still not there :/
Add new class IndexedJsonArray and start to modify code in JsonDiff

With this new class, there are good hopes that the algorithm can be simplified.
JsonDiff: remove three unused variables
JsonDiff: more uses of IndexedJsonArray
Start and add static factory methods to Diff
JsonDiff: more Diff static factory method, remove three variables
Diff: make all constructors private
JsonDiff: remove another unneeded condition in array main loop

The condition was to check whether:

node2 != null && !EQUIVALENCE.equivalent(node2, lcsNode)

However, at this point, the LCS was not exhausted; which means node2 could not
be null either.