findSuperType
Returns a supertype for existingType and incomingType if one exists.
If they are deeply equal (according to IcebergTypesComparator.typesAreEqual), returns the existingType as-is.
Otherwise, attempts to combine them into a valid supertype.
Throws ConfigErrorException if no valid supertype can be found.