Add safe integral auto-coercions

[View](https://github.com/tommit/rfcs/blob/safe-integral-auto-coercions/active/0000-safe-integral-auto-coercions.md)
The problem is it divorces the reported error from the actual error. The line `bar(y);` is not the bad code. The line `let y = x + mystery_func();` is the bad code. Yes, you can get the same issue today merely by using a bad type, e.g. if `bar()` took `x: i32` instead of `x: u32`. But in the cited example, it looks straightforward, it looks like the typing should all match, and the error on `bar(y);` is therefore confusing.