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]
parseint: allow automatic base detection via 0[box] prefixes.
parseint: speed up parsing by avoiding checks in main paring loop.

The trick here is that we know that we can't possibly overflow until
we reach a fairly large value for each type. In particular, we can't
possibly overflow while n <= div(typemax(T)-base+1,base). After that
we can have one or two decoding cycles left, which actually have to
be checked for overflow. The "naïve" version was 2x+ slower than the
unchecked version, while this version is only around 15% slower.
parseint: tests of overflow detection.
parseint: tests for automatic base detection.