inference: fix recursion limit heuristic
There's several related issues here:
1. Covariant kinds provide no meaningful information for the type size
limit heuristic. We should be just ignoring those and walking through to
the actual structural information of any real substance.
This seems to also make type_more_complex, _limit_type_size, and
is_derived_type more similar, which is probably always preferable.
2. Allowing type intersection to revise our type later can
cause it to reintroduce complexity (constraints) according to our metric,
while we want to only move up the type-hierarchy,
which can allow us to accidentally escape from the limit.
So if we've limited the type, we don't want to use a different type
that was derived by type-intersection and may not have our limits
applied anymore.
3. Inside `is_derived_type`, the var field of a UnionAll
should not increase the nesting depth, since `T<:(Ref{S} where S<:Any)`,
should observe the same depth as `{S<:Any, T<:Ref{S}}`.
fix #26665