Add factorizing support for converting duplicate add to copy operations

Added simple logic to and convert subsequent duplicate value'd add operations to copy operations along with test cases. Only non-empty array and object add values are considered since using copy operations for single or simple values would not the reduce patch operation count and would obfuscate patches that otherwise might be trivial.

There is only one wrinkle with this implementation: adds that are appending values to the end of a list cannot be used for subsequent copies. This is because the value does not have a concrete path from which to copy, (the from path cannot be computed easily based on the diff data currently available). This case should be generally rare and probably is not worth writing special case code or abandoning the append path in general to make work. The new test cases include an example of this limitation.