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.
Actually constrain umax, abs to return same type as arguments
Allow 'undef' only in operands.
Merge pull request #8 from nunoplopes/functions-return-type-of-args

Make abs, lshr, and umax return types match argument types.
added bugs found in LLVM instcombine
added test case to demonstrate the slight differences with the usage of predicates and functions
adding instcombine shift tests
Merge branch 'master' of https://github.com/santoshn/alive