Add safe integral auto-coercions

[View](https://github.com/tommit/rfcs/blob/safe-integral-auto-coercions/active/0000-safe-integral-auto-coercions.md)
Oops, I re-used the name `bar()`, that's a bit confusing. I'll fix it. I meant for the first call to `bar()` to be some unknown function with an unknown return value. The expectation is if the line `let y = x + bar()` compiles, then `bar()`'s return value must be compatible with `x`, which is a `u32`, and addition on integral types is known to return the receiver type.