parseint: code cleanup.
Base.checked_{add,sub,mul}: checked versions of +, - and *.

We've had the intrinsics for checked arithmetic for a rather long time,
we just haven't used it anywhere. This defines checked +, - and * the
same way that we define +, - and *. I had a previous version in which
these worked like +, - and * with promotion and all, but realized that
wasn't actually desirable. When you're doing checked arithmetic, you
want strictly same-type arguments and you want to make sure that they
don't result in an overflowed result for that exact integer type.

Note that there may be an LLVM bug for checked 8-bit multiply: the
overflow flag ends up set no matter what two values you multiply. I
worked around this by defining 8-bit checked multiply without LLVM's
intrinsic, but it would be good to look into this further.
parseint: basic implementation of overflow-detection [fixes #4874]