doc: Add "A 30-minute Introduction to Rust"

By Steve Klabnik.
doc: Edit intro
Document traits in std::num (#7511)
libstd: Add unwrap_or and unwrap_or_handle to Result
Update tutorials to use new attribute syntax (#13476)
std: migrate path::unix to using Vec internally.
std: migrate path::windows to using StrBuf internally.

Same representation change performed with path::unix.

This also implements BytesContainer for StrBuf & adds an (unsafe) method
for viewing & mutating the raw byte vector of a StrBuf.
std: update & de-~[] path's tests.
Check bounds when looking up type parameters

A mismatched type with more type parameters than the expected one causes
`typeck` looking up out of the bound of type parameter vector, which
leads to ICE.

Closes #13466
rustdoc: Fix rendering closures and trait bounds

Closures did not have their bounds printed at all, nor their lifetimes. Trait
bounds were also printed in angle brackets rather than after a colon with a '+'
inbetween them.

Note that on the current task::spawn [1] documentation page, there is no mention
of a `Send` bound even though it is crucially important!

[1] - http://static.rust-lang.org/doc/master/std/task/fn.task.html
rustc: Don't link in syntax extensions

This bug was introduced in #13384 by accident, and this commit continues the
work of #13384 by finishing support for loading a syntax extension crate without
registering it with the local cstore.

Closes #13495
auto merge of #13470 : Manishearth/rust/docnum, r=brson

See #7511
auto merge of #13464 : alexcrichton/rust/fix-rustdoc-rendering, r=brson

Closures did not have their bounds printed at all, nor their lifetimes. Trait
bounds were also printed in angle brackets rather than after a colon with a '+'
inbetween them.

Note that on the current task::spawn [1] documentation page, there is no mention
of a `Send` bound even though it is crucially important!

[1] - http://static.rust-lang.org/doc/master/std/task/fn.task.html
rustdoc: Use smaller sequential numbers instead of `NodeId`s for parents.

`allPaths` is now a flat array in effect. This decreases the size of
the search index by about 4--5% (gzipped or not).
rustdoc: Represent item types as a small number in the search index.

Has negligible improvements with gzip, but saves about 7% without it.
This also has an effect of changing the tie-breaking order of item types.
rustdoc: Use an array instead of an object for the search index.

`buildIndex` JS function recovers them into the original object form.
This greatly reduces the size of the uncompressed search index (27%),
while this effect is less visible after gzipped (~5%).
rustdoc: Get rid of `allPaths` global variable by merging it into `searchIndex`.
rustdoc: Omit repeated paths in the search index.

Since the items roughly follow the lexical order, there are
many consecutive items with the same path value which can be
easily compressed.

For the library and compiler docs, this commit decreases
the index size by 26% and 6% before and after gzip, respectively.
auto merge of #13475 : Ryman/rust/result_unwrap_or_else, r=brson

It might make more sense to mirror `Option`'s `unwrap_or_else` but I've left it as `handle` as it feels more explicit about the signature difference.
Make Result::{unwrap, unwrap_err} require Show

`foo.ok().unwrap()` and `foo.err().unwrap()` are the fallbacks for types
that aren't `Show`.

Closes #13379