RFC: Stabilize `std::fmt`

High-level summary:

* Leave the format syntax as-is.
* Remove a number of superfluous formatting traits (renaming a few in the process).


[Rendered](https://github.com/alexcrichton/rfcs/blob/stdfmt/active/0000-stabilize-std-fmt.md)
It's true that you get some level of assurance, but I wouldn't necessarily call it typechecking. Just like `{}` the `{:u}` format modifier can be implemented by anything in the world, and we may decide on day to have `Unsigned` for `Option<T>` delegate to the inner `T` in which case your example would have the same problem as `{}`.

In general this form of "typechecking" should be done with ascription rather than format modifiers. Due to the polymorphic nature of traits, I think that the guarantees would have been fairly limited if we kept the traits.