Diff: Add unchanged path detection

The principle is to harvest the structure common to the source and destination
JSON trees.

As paths to these JSON values will not change, it will be safe to reuse these
values in copy operations.
New DiffOperation class

There is probably too much in it at the moment, but the algorithm to generate
diffs is not fully clear yet.
DiffOperation: no need for the new pointer on .replace()
DiffOperation: add ability to generate JsonPatchOperations
JsonPatch: make constructor public

Although one should never have to use it.
New class DiffProcessor

This is the class which will hold diff operations and perform factorization/etc
when possible.
Add AssertJ dependency
JsonDiff: add .asJson(), .asJsonPatch() methods
Tests for JsonDiff
JsonDiff: javadoc, remove main(), some argument renaming
DiffProcessor: factorize additions into copies where possible

If an element is added which already exists in the source and is unchanged in
the target, make the addition a copy instead.
DiffProcessor: make final

We won't spy() on it after all.
DiffProcessor: detect removed values which are added again

In this case, fuse the removal and addition operation into a move and remove the
removal operation.
DiffOperation: arguments rename, add comments
JsonDiff: more Javadoc; enforce non null arguments
Get rid of the old diff implementation
Update README