Implement ordered set and list diff-ing functions

Implement ordered set and list diff-ing functions
for use with 3-way merging of item section, URL and field lists.

The implementation uses the 'adiff' package to perform
the initial list diffing but we implement the patching
and merging ourselves in order to:

 1) Add support for diffing/patching of ordered sets,
    represented as arrays of unique elements

 2) Have a diff implementation with reasonable internal documentation
    for debugging.

I looked at a number of diffing libraries before implementing
this, including adiff, xdiff, jsondiffpatch and diff-merge-patch.

 - xdiff is the simplest package but lacks control over merge resolution
   in the event of conflicts.
 - jsondiffpatch lacks 3-way merging support
 - diff-merge-patch has all the features needed but the README warns
   of bugs and there is at least one basic one documented at
   https://github.com/mirkokiefer/diff-merge-patch/issues/2

   The implementation is non-trivial to read/understand/fix.
Additional comments to clarify diff implementation
Simplify diff op sorting when patching

The logic to sort removals before insertions is not required
when patches are transformed correctly against already-applied
patches before being applied.

sortPatch() was also relying on Array.sort() being stable,
which it isn't guaranteed to be.
Fix a bug creating 'insert' diff ops

The wrong value was saved in the DiffOp's value
attribute.
Add additional diff merging tests
Implement merging of item URLs

Merge item URL lists by using the label as a key
to merge the lists as sets
Re-add xdiff dependency

I forgot that this is still used by the unit testing framework.
Implement merging of URL fields with the same labels

The 'label' field of URL entries is not unique and
the official 1Password app for iOS at least defaults
to using 'website' as the label for each new URL entry.

Use the combination of label+url as the field key.
This allows us to detect moves of URL fields in the list
during merges. Any changes to existing fields are handled
as removal + insert rather than modify (or move+modify)
Add tests for merging and updating form fields
Add test for merging item sections