The idea is to find two representatives out of the two ranges which will (by construction) form the UMin of the post-binaryAnd range when and'd, and do it again for the UMax.
For wrapped ranges, we break the range in two non-wrapping ConstantRanges, a low part and a high part, and use the algorithm above to pick representatives between the LHS ranges and RHS ranges.
I'm quite confident that the resulting range includes all possible results, and that the result is the smallest to do so except maybe for wrapping ranges.
I'd greatly appreciate any help simplifying this algorithm, both in implementation and in explanation (the details in the comments). As it stands I think this is too messy to commit and I'm hopeful that the review discussion will lead to significant improvements.