std: Change hash to reexport its own Writer

One of the long-term goals of the libstd facade is to move the collections
library underneath the standard library. This would imply that libcollections
today would invert its dependency with libstd.

One of the primary blockers for doing this is the HashMap collection. Of its two
major dependencies, hashing and randomness, this commit is the first step in
dealing with hashing.

When moving the hash module beneath libstd, it must break its primary dependence
on the io::Writer trait (used as the hashing state). The proposed strategy for
breaking this dependence is taking a similar path as core::fmt, which is to have
the hash module define its own "writer trait". This trait would be similar to
std::io::Writer, except that it would not return errors and it would have fewer
convenience methods.

The Hash trait today has its type parameter behind a feature gate (default type
parameters), so this pending change will likely break no code which hasn't opted
in to the feature gate. The SipState struct will lose its implementation of
io::Writer, but it will regain similar methods for dealing with writing data.

This change specifically prepares for the hash migration by modifying
deriving(Hash) to use the std::hash::Writer bound instead of the std::io::Writer
bound. This bound is currently wired to std::io::Writer, but after a snapshot it
will have no need to be wired to the io writer trait.
Change static.rust-lang.org to doc.rust-lang.org

The new documentation site has shorter urls, gzip'd content, and index.html
redirecting functionality.
doc: Fix some broken links
Add a suggestion to use a `let` binding on some borrowck errors.
Spelling/doc formatting fixes.
syntax: put the correct span on doc-comments inside a module.

The position of the .bump call (before extracting the span fields) was
causing a doc-comment to have the span of the next token, not itself.
Remove a slew of old deprecated functions
auto merge of #14350 : zwarich/rust/let-suggestion, r=pcwalton
Fixed incorrect module path
extra::arc -> sync::arc
libstd: Remove `~str` from all `libstd` modules except `fmt` and `str`.
libtime: Remove the `tz_zone` field from times.

It depends on `~str`.
libstd: Remove all uses of `~str` from `libstd`
libcore: Remove all uses of `~str` from `libcore`.

[breaking-change]
doc: Touch up the unsafe guide

* Change ~ references to Box
* Rewrite examples so they can be compiled an run
* Mention libcore
* Update wording about compiler-required functions
auto merge of #14310 : pcwalton/rust/detildestr-alllibs, r=brson

r? @brson
auto merge of #14348 : alexcrichton/rust/doc.rust-lang.org, r=huonw
auto merge of #14314 : alexcrichton/rust/deriving-hash, r=brson

One of the long-term goals of the libstd facade is to move the collections
library underneath the standard library. This would imply that libcollections
today would invert its dependency with libstd.

One of the primary blockers for doing this is the HashMap collection. Of its two
major dependencies, hashing and randomness, this commit is the first step in
dealing with hashing.

When moving the hash module beneath libstd, it must break its primary dependence
on the io::Writer trait (used as the hashing state). The proposed strategy for
breaking this dependence is taking a similar path as core::fmt, which is to have
the hash module define its own "writer trait". This trait would be similar to
std::io::Writer, except that it would not return errors and it would have fewer
convenience methods.

The Hash trait today has its type parameter behind a feature gate (default type
parameters), so this pending change will likely break no code which hasn't opted
in to the feature gate. The SipState struct will lose its implementation of
io::Writer, but it will regain similar methods for dealing with writing data.

This change specifically prepares for the hash migration by modifying
deriving(Hash) to use the std::hash::Writer bound instead of the std::io::Writer
bound. This bound is currently wired to std::io::Writer, but after a snapshot it
will have no need to be wired to the io writer trait.
auto merge of #14357 : huonw/rust/spelling, r=pnkfelix

The span on a inner doc-comment would point to the next token, e.g. the span for the `a` line points to the `b` line, and the span of `b` points to the `fn`.

```rust
//! a
//! b

fn bar() {}
```
libcore: Document math intrinsics.
auto merge of #14362 : zecozephyr/rust/docfixes, r=cmr

extra::arc -> alloc::arc