RFC: Preserve type on integer arithmetic

This is my try to make `Int8 + Int8 = Int8`. It would fix #3759 which now has the 0.4-projects tag indicating that there is hope that this gets accepted :-)

I had to fix some tests and the unicode test still fails with

    exception on 2: ERROR: test failed: utf8(u16) == u8
I have partly understood the issue but I think it is worth opening a new issue dedicated to this problem, especially if this is used more often in base.

From this dedicated issue it would be great if we could get a recommendation how to implement this. Using the for loop with eval or using what Jameson proposed in https://github.com/JuliaLang/julia/pull/8028#discussion_r16518764

The motivation to change these lines were actually to remove the `eval` because I have read several messages by @vtjnash that `eval` should be rarely used.