private static void handleEntry(DocumentProperty existing, Document proposed, DocumentConstructor constructor, Map.Entry<String, Object> entry) {
        final String key           = entry.getKey();
        final Object proposedValue = proposed.getData().get(key); // Or null

        // Check if the proposed value fulfills the requirements to be
        // considered a list of child documents.
        if (proposedValue instanceof List<?>) {
            @SuppressWarnings("unchecked")
            final List<Object> list = (List<Object>) proposedValue;
            handleList(existing, proposed, constructor, key, list);
        } else {
            // If it wasn't a key used for child documents, consider it a
            // property.
            handleProperty(existing, proposedValue, key);
        }
    }
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