rustc: middle: lint: use more doc comments
rustc: middle: ty: use doc comments for the tcx
rustc: add a lint for large enum variants

It can be easy to accidentally bloat the size of an enum by making one variant
larger than the others. When this happens, it usually goes unnoticed. This
commit adds a lint that can warn when the largest variant in an enum is more
than 3 times larger than the second-largest variant. This requires a little
bit of rejiggering, because size information is only available in trans, but
lint levels are only available in the lint context.

It is allow by default because it's pretty noisy, and isn't really *that*
undesirable.

Closes #10362
rustc: abstract lint level exporting from EnumSizeVariance
rustdoc: Inline documentation of `pub use`

This commit teaches rustdoc to inline the documentation for the destination of a
`pub use` statement across crate boundaries. This is intended for the standard
library's facade to show the fact that the facade is just an implementation
detail rather than the api of the standard library itself.

This starts out by inlining traits and functions, but more items will come soon.
The current drawback of this system is that hyperlinks across crates sill go to
the original item's definition rather than the reexported location.
std: Add doc(noinline) to the prelude reexports
rustdoc: Start inlining structs across crates
rustdoc: Inline enums across crates
rustdoc: Don't show reexported enum variants

For now just assume that the enum type itself is reexported.
rustdoc: Inline argument names of foreign methods
rustdoc: Inline names of function arguments
rustdoc: Inline reexported modules
rustdoc: Use csearch for impl loading

The normal analysis passes aren't guaranteed to have loaded all impls, so use
the csearch methods directly to load impls.
rustc: Encode module attributes

This will allow for rustdoc to pick up the documentation on the other end.
rustdoc: Prevent a segfault when using markdown

The field passed from markdown could sometimes be null, and it wasn't properly
handled.
rustdoc: Link to local reexportations of items

Within the documentation for a crate, all hyperlinks to reexported items don't
go across crates, but rather to the items in the crate itself. This will allow
references to Option in the standard library to link to the standard library's
Option, instead of libcore's.

This does mean that other crate's links for Option will still link to libcore's
Option.
rustdoc: Fix rendering of the 'static bound
rustdoc: Get [src] links working for inlined dox

These links work by hyperlinking back to the actual documentation page with a
query parameter which will be recognized and then auto-click the appropriate
[src] link.
doc: Document the new #[doc(no_inline)] attribute
rustdoc: Move inlining to its own module