Add safe integral auto-coercions

[View](https://github.com/tommit/rfcs/blob/safe-integral-auto-coercions/active/0000-safe-integral-auto-coercions.md)
Drawback: silent conversions are confusing.

```rust
fn bar(x: u32) { /* ... */ }
fn foo(x: u32) {
    let y = x  + bar(); // clearly a u32, right? It's derived from x
    // ... code goes here
    bar(y); // error, argument must be u32?
}
```