allow abstract type parameter variance only if field-less cast to underlying type exists (closes #2157)