Add support for stability attributes: #[deprecated], #[experimental], etc.

### not ready for review

It appears that attributes on enums and their variants are not encoded into the crate metadata, and just adding the `encode_attributes` call in the last commit doesn't appear to help. I'd like some guidance.

---

Significant progress on #6875, enough that I'll open new bugs and turn that into a metabug when this lands.

Explanation from the commit message:

> There are 6 new compiler recognised attributes: deprecated, experimental,
> unstable, stable, frozen, locked (these levels are taken directly from
> Node's "stability index"[1]). These indicate the stability of the
> item to which they are attached; e.g. `#[deprecated] fn foo() { .. }`
> says that `foo` is deprecated.

> This comes with 3 lints for the first 3 levels (with matching names) that
> will detect the use of items marked with them (the `unstable` lint
> includes items with no stability attribute). The attributes can be given
> a short text note that will be displayed by the lint. An example:
>
>     #[warn(unstable)]; // `allow` by default
> 
>     #[deprecated="use `bar`"]
>     fn foo() { }
>
>     #[stable]
>     fn bar() { }
>
>     fn baz() { }
> 
>     fn main() {
>         foo(); // "warning: use of deprecated item: use `bar`"
> 
>         bar(); // all fine
> 
>         baz(); // "warning: use of unmarked item"
>     }
>
> The lints currently only check the "edges" of the AST: i.e. functions,
> methods, structs and enum variants. Any stability attributes on modules,
> enums, traits and impls are not checked.
> 
> [1]: http://nodejs.org/api/documentation.html