Some small patch for typeintersect. (#48224)
* Add missing var-substitution in omit_bad_union.
follow up 303734204dbe74f1a5d1defcb4ae3ada3e318dd4
* Also check free typevar's bounds in `reachable_var`
They might be recreated in `finish_unionall`, (thus `lookup` returns false.)
But their bounds might still live in the current env.
close #44395.
(#44395 could also be fixed by the fast path added in #48221.
This commit would skip more `intersect_var` under circular constraint.)
* Disallow more circulation once we set `lb`==`ub`.
close #26487.
This should be valid as we never set `X<:Y<:X` (assuming `Y` is the outer var).