Do not attempt to autoderef `!`

This prevents error spam when attempting to look up overload traits.
Disallow dereference of `!`

Later compiler passes are not prepared to deal with deref of
`ty_bot` and will generate various ICEs, so disallow it outright for now.

Closes issue #17373
Disallow index of `!`

This avoids ICEs in later passes that cannot cope with this construct
Add regression test for issue #17373
Add test that `!` cannot be indexed
Update CONTRIBUTING.md with new issues policy
Lint stability now checks macro arguments.

Closes #17185.
Update calls of deprecated functions in macros.

Fallout of #17185.
Fix deprecation warnings in check-docs.

Fallout of closing #17185.
auto merge of #17408 : bkoropoff/rust/bot-ice, r=alexcrichton

- Don't attempt to autoderef `!`.  The `Deref`/`DerefMut` trait lookup would generate a bunch of unhelpful error spew.
- Don't allow explicit deref of `!`, since later passes just ICE.  This closes issue #17373 
- Don't allow explicit index of `!`, since later passes just ICE.  There does not seem to be an issue associated with this
auto merge of #17286 : vberger/rust/deprecated_in_macros, r=aturon

Closes #17185.

The stability lint will now check code generated by macro expansion. It will allow to detect :
- arguments passed to macros using deprecated (and others) items
- macro expansion generating code using deprecated items due to its arguments (hence the second commit, fixing such issue found in libcollections)

Checking is still done at expansion, but it will also detect a macro explicitly using a deprecated item in its definition.
auto merge of #17432 : nick29581/rust/contrib, r=brson

r? @brson
librustc: Forbid private types in public APIs.

This breaks code like:

    struct Foo {
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

Change this code to:

    pub struct Foo {    // note `pub`
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

The `visible_private_types` lint has been removed, since it is now an
error to attempt to expose a private type in a public API. In its place
a `#[feature(visible_private_types)]` gate has been added.

Closes #16463.

RFC #48.

[breaking-change]
auto merge of #17401 : pcwalton/rust/private-items-in-public-apis, r=alexcrichton

This breaks code like:

    struct Foo {
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

Change this code to:

    pub struct Foo {    // note `pub`
        ...
    }

    pub fn make_foo() -> Foo {
        ...
    }

The `visible_private_types` lint has been removed, since it is now an
error to attempt to expose a private type in a public API.

Closes #16463.

RFC #48.

[breaking-change]

r? @alexcrichton
Check for null bytes before calling with_c_str on link_section and export_name value strings.