Rustfmt changes

Updated with some small changes

tl;dr active development of Rustfmt will become nightly only for a while, and the default formatting will change dramatically.

There are two big but orthogonal issues facing Rustfmt right now.

On the formatting front, we've been discussing how Rustfmt should format code in the style RFC process. That process is almost complete and by using the options in rfc-rustfmt.toml, mostly implemented. I think that the implementation is mature enough that we should switch to using this style by default. It will be good to iron out the edge cases, and find the bugs, and that needs lots of users! These are fairly big changes to the default style, but I hope you agree that the changes are for the better.

Under the covers, Rustfmt uses the Syntex crate to parse Rust code. Unfortunately, that crate is no longer maintained and that is causing us multiple bugs, especially around new features being added to the language, but also around such things as paths on Windows. It is basically impractical to continue using Syntex. The path of least resistance is to switch to using the compiler's libsyntax directly. This has been implemented on the libsyntax branch, which I would recommend using if you are building Rustfmt yourself. Unfortunately, programs can only use libsyntax if they are on the nightly compiler (since it is an unstable feature).

Long-term, the plan is to distribute Rustfmt using Rustup, rather than Cargo. This will allow us to work on the stable toolchain as well as nightly. However, this will take some doing, there are questions we need to answer about integration with Rust CI, etc. However, I believe that we've reached the point where we can't continue to distribute Rustfmt based on Syntex. So I will be merging the libsyntax branch to master. This means that until we implement Rustup distribution, the latest Rustfmt will not work with the stable Rust toolchain.

In detail: we are currently on v0.8.4. I will change the style defaults to the RFC style and make this v0.9. That will continue to use Syntex (so will work with stable Rust). I will then fork a 'legacy' branch (I'll take PRs but I don't plan to backport commits), and merge the libsyntax branch to master.

The Rustfmt crate will be stuck at 0.9 for the foreseeable future. Libsyntax-based rustfmt will be a new crate, rustfmt-nightly. It will be the preferred way to use rustfmt, but nightly only. (Note that Rustup makes it really easy to switch between toolchains, so I'd recommend doing this and using rustfmt-nightly).

I'm very sorry for the inconvenience here, but I hope it will lead to a much better tool in the long run.