public static void merge(
            final DocumentProperty existing,
            final Document proposed,
            final DocumentConstructor constructor) {

        requireNonNull(existing);
        requireNonNull(proposed);
        requireNonNull(constructor);
        
        // Go through the keys specified by the proposed document
        proposed.getData().entrySet()
            .forEach(entry -> handleEntry(existing, proposed, constructor, entry));
    }
Merges a single document into an existing one, trying to save as much
information as possible. If new {@link DocumentProperty properties} need
to be created, the specified constructor is used.

@param existing     the document to merge into
@param proposed     the document to merge with
@param constructor  used to create new {@link DocumentProperty}
tool-parent/tool-config/src/main/java/com/speedment/tool/config/util/DocumentMerger.java