WIP: checked integer conversions

This is not done yet but ready for discussion at least.

1. fixes #3759, making arithmetic type-preserving
1. fixes #5413, checking integer truncations
1. also checks signed<->unsigned conversions

(1) was simple and did not really break much.
(2) was a bit more breaking, but not too bad and leads to clearer code in most cases.
(3) was kind of a disaster and seems to be very annoying.

The problem with (3) is that interpreting a 2's complement integer as unsigned is mathematically useful. It also comes up a lot in hashing, random number generation, and when you just want to write a byte to an IO stream.

I'm not sure yet how to rewrite https://github.com/JuliaLang/julia/blob/ec607da4d3b25663487dd8c5e773d661b6bb6054/base/random.jl#L209 with checked integer conversions. We need to decide how to handle cases like this.

I think adding these checks is clearly the right thing, but I was surprised at how many legitimate uses of "unsafe" integer conversion there were. I added methods to `itrunc` for unsafely truncating integers, but this only handles converting from larger to smaller. We need to figure out what other functions might be needed.
oh, i see that this isn't in base, so it isn't as important. it seems like a pretty good name for `assigned`/`asunsigned` (e.g. `coerce(Signed, x)`)

it's missing a test for `isleaftype(T)` before `sizeof(T)` which is needed if this does end up in base, and a few other possible definitions:

```
coerce(::Type{Unsigned}, x) = coerce(typeof(unsigned(zero(x))), x)
coerce(::Type{Signed}, x) = coerce(typeof(signed(zero(x))), x)
coerce{T}(::Type{T}, x::T) = x
```