Apply SimplifyUsingDistributiveLaws to the associative/commutative cases. For
example, if we have "(A op B) op C", we try to transform it to "A op (B op C)"
and try to simplify the "(B op C)" part (even when "(B op C)" doesn't fold to a
constant).
A motivation example is a bit-check combining simplification like
((A & 1) == 0) && ((A & 2) == 0) && ((A & 4) == 0) &&
((B & 1) == 0) && ((B & 2) == 0) && ((B & 4) == 0)
-->
((A & 7) == 0) && ((B & 7) == 0)
which didn't fully happen previously.
The general direction is still under discussion, but I want to point out some test changes that would make this easier to understand: