Here's a rebase up to HEAD, mainly to get the cfbot back in sync as to what's the live patch.
Noticed another different behavior from previous. When we try to reduce JOIN_LEFT to JOIN_ANTI, we want to know if the join's own quals are strict for any Var that was forced null by higher qual levels. We do that by checking whether local_nonnullable_vars and forced_null_vars overlap. However, the same Var from local_nonnullable_vars and forced_null_vars may be labeled with different varnullingrels. If that is the case, currently we would fail to tell they actually overlap.
I wonder why this is not noticed by regression tests. So I did some search and it seems we do not have any test cases covering the transformation we apply to reduce outer joins. I think maybe we should add such cases in regression tests.