Honor variance when computing self subtype

Currently, rustc only applies variance rule for region substitution.
Applies the same rule to self subtyping.

Closes #12223.