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.
for completeness:
```
coerce{T<:Rational}(::Type{T}, x) = convert(T, coerce(typeof(num(zero(T))), x))
function coerce{T<:Integer}(::Type{T}, x)
    if sizeof(T) < sizeof(x)
        itrunc(T, x)
    else if sizeof(T) == sizeof(x)
        reinterpret(T, x)
    else
        convert(T, x)
    end
end
coerce(::Type{Bool}, x) = convert(Bool, x)
coerce{T}(::Type{T}, x) = convert(T, x)
```
i think the above would generate better code, since it lets the compiler eliminate the tests and inline much better