workaround subtyping bugs via construction
The subtyping algorithm is unable to correctly handle the case where the UnionAll bounds and swapped with other covariant bounds
This works around that issue during construction.
Unfortunately, this often triggers the more serious subtyping design bug
referenced in subtype.c, causing frequent segfaults:
873 // TODO this is not strictly correct, but we don't yet have any other way for
874 // e.g. the argument `Int` to match a `::DataType` slot. Most correct would be:
875 // Int isa DataType, Int isa Type{Int}, Type{Int} more specific than DataType,
876 // !(Type{Int} <: DataType), !isleaftype(Type{Int}), because non-DataTypes can
877 // be type-equal to `Int`.
fix #23278