Make abs, lshr, and umax return types match argument types.

This potentially reduces unnecessary type variation, and fixes a crash when `lshr(undef,1)` occurred in a precondition.

This prevents certain test cases where `C1` and `C2` have one type, but `umax(C1,C2)` has another, but I don't believe this is an intended feature.