`ConstantRangeTest.cpp`were bugs to begin with, AFAICT.

This "fixes" a bug in `intersectWith` by rewriting it. The idea is that

we can extend the bitwidth of a constant range by a bit and use that to

simplify the logic around checking for wrapped ranges.

Roughly, if this is our number line with a wrapped range

|---)----[-------|

we map the wrapped range to

|--------[-------|---)------------| .. (A)

and if this is the number line with an not-wrapped range

|---[----)-------|

we map it to

|---[----)-------|----------------| .. (B)

or

|----------------|---[----)-------| .. (C)

When intersecting a wrapped range with an unwrapped one (the "hard"

case), we intersect (A) with (B) and (A) with (C); and pick the larger

of the two.

We can do the same thing for unions.