Release channels and feature staging

This RFC describes changes to the Rust release process, primarily the division of Rust's time-based releases into 'release channels', following the 'release train' model used by e.g. Firefox and Chrome; as well as 'feature staging', which enables the continued development of experimental language features and libraries APIs while providing strong stability guarantees in stable releases.

[Rendered](https://github.com/brson/rfcs/blob/release-channels/text/0000-release-channels.md).
I'm really not fond of forking the plugin process into plugins for nightly and codegen for non-nightly -- codegen is not too clean and will end up polluting larger codebases with hacks to make it work. But I see the necessity of keeping libsyntax hidden.

Would it be possible to selectively allow lint libraries? We can allow these to break -- have them be loaded via Cargo with a mention of the exact Rust release they work with -- if the version is different, they will not be loaded at all (emitting a warning at compile time).

I'm currently working on a bunch of lints for newbies; it would be nice if they could be used by 1.0 users (which probably will be what most newbies use).

Alternatively, if [this](https://github.com/rust-lang/rust/issues/15446) is implemented, allowing that flag (but making no guarantees on it working) for a release rustc would be fine too. This way it doesn't break libraries, though it may temporarily break workflows.