rustdoc: Generate valid code for struct-variants

Closes #9587
rm only use of type_is_immediate outside of trans
Add test for issue #9446.
Clarify format! implicit positional references

It was a little ambiguous before how explicitl positional parameters and
implicit positional parameters intermingled, and this clarifies how the two
intermingle. This also updates a little bit of documentation/code examples
elsewhere as well.
add -Z soft-float option

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.
rustdoc: Add the ability to input json

This modifies the command-line usage of rustdoc to intake its own JSON output as
well as a rust source file. This also alters the command line from
`rustdoc input file`  to `rustdoc file` with the input/output formats specified
as -r and -w, respectively.

When using a JSON input, no passes or plugins are re-run over the json, instead
the output is generated directly from the JSON that was provided. Passes and
plugins are still run on rust source input, however.
rustdoc: Update the man page

Closes #9622
rustdoc: Detect repeated keys and fix width

When a key is pressed and held, this now does the OS-style repeating after a bit
of a pause. Also fixes the width of search results to be correct (was changed
beforehand and didn't catch this).
rustdoc: Use a BufferedWriter when emitting source

This takes the rendering time of source files for libstd from 12.5s to 0.1s,
turns out write! calls the write function *a lot*
rustdoc: Stop ignoring dox on fields/variants

This is progress towards #9611
rustdoc: Don't ignore dox on impl blocks

Closes #9611
fix dropping non-primitive immediates

Closes #9446
auto merge of #9643 : thestinger/rust/immediate, r=alexcrichton
Prevent leakage of fmt! into the compiler

We're not outright removing fmt! just yet, but this prevents it from leaking
into the compiler further (it's still turned on by default for all other code).
std: Remove usage of fmt!
extra: Remove usage of fmt!
syntax: Remove usage of fmt!
rustc: Remove usage of fmt!
rusti: Remove usage of fmt!
rustdoc: Remove usage of fmt!