allow recursive constraints unless there's a direct loop between type parameters (prevent cases such as <T:T> or <X:Y,Y:X>)