rustdoc: refactor code block language info into a struct.

Fields have names, unlike an anonymous tuple.
rustdoc: add the ability to run tests with --test.

This adds the `test_harness` directive that runs a code block using the
test runner, to allow for `#[test]` items to be demonstrated and still
tested (currently they are just stripped and not even compiled, let
alone run).
(doc) Properly doc hotkeys in generated docs.

Updated search bar to match help text.
Used correct, normalized hotkeys in search.
Updated shortcut menu with working shortcuts (tabs).
Changed height of search help.
Update the external links in the doc index

Splits 'extern resources' into 'external documentation and 'community',
adds rustforrubyists.com and rustbyexample.com, stackoverflow.com.
doc: Add disclaimers about versions of external docs
auto merge of #15037 : zzmp/rust/doc/hotkeys, r=alexcrichton

Continuing from #15012, this makes four changes to the `rustdoc` static files.

- Change the placeholder text of the search bar to `Click or press 'S' to search, '?' for more options...` to make keyboard hotkeys more apparent (capitalizing the `S` to match the help text).
- Change the `main.js` file to use browser-normalized key codes (`e.which`, from `jQuery`), instead of `e.keyCode`.
- Change the key code for `?` to be the correct `191` instead of `188`, so that the hotkey works to bring up search information.
- Change the search information to display `tab` and `shift+tab` instead of `up` and `down`, as those do not yet work outside of Firefox (see #15011). Also, adjust the height so it does not cut off the help text.


I've also opened up #15038 about the non-functional `up` and `down` functionality, although this does nothing to fix it.

sync: Enable the fast path of select()

This was erroneously disabled as part of 065e121f and it hasn't been turned on
since. This was a 3x perf improvement in a test of mine.
testing guide: update to use `test_harness` & fix problems.

rustdoc now supports compiling things with `--test` so the examples in
this guide can be compiled & tested properly (revealing a few issues &
out-dated behaviours).

Also, reword an example to be clearer, cc #12242.
doc: Fix margins around tables of contents

There is no space between the TOC and the succeeding para.
std: Update std::task docs to reflect modern times

This corrects some misinformation.
auto merge of #15039 : huonw/rust/rustdoc-testharnesss, r=alexcrichton

    ```test_harness
    #[test]
    fn foo() {}
    ```

will now compile and run the tests, rather than just ignoring & stripping them (i.e. it is as if `--test` was passed).

Also, the specific example in https://github.com/rust-lang/rust/issues/12242 was fixed (but that issue is broader than that example).
auto merge of #15041 : brson/rust/docindex, r=alexcrichton

Splits 'extern resources' into 'external documentation and 'community',
adds rustforrubyists.com, rustbyexample.com, stackoverflow.com.
std::sync::TaskPool: Improve module documentation

The struct and module doc comments are reformulated. The `execute`
method's documentation are put up to date, and failure information
is added. A test is also added to address the possible failure.
Implement Eq for Bitv and BitvSet
auto merge of #14993 : alxgnon/rust/taskpooldocfix, r=alexcrichton

TaskPool is the only item in the std::sync doc that doesn't have a summary. This fixes that problem.
auto merge of #15044 : alexcrichton/rust/speed-up-select, r=kballard

This was erroneously disabled as part of 065e121f and it hasn't been turned on
since. This was a 3x perf improvement in a test of mine.
auto merge of #15047 : brson/rust/taskdocs, r=huonw

This corrects some misinformation.
auto merge of #15048 : brson/rust/toc-margin, r=alexcrichton

There is no space between the TOC and the succeeding para.

See http://doc.rust-lang.org/guide-pointers.html for example.
auto merge of #15050 : kaseyc/rust/impl_eq_for_bitv_bitvset, r=alexcrichton
Check pattern refutability the same way exhaustiveness is checked