std: rewrite Hash to make it more generic

This patch merges IterBytes and Hash traits, which clears up the
confusion of using `#[deriving(IterBytes)]` to support hashing.
Instead, it now is much easier to use the new `#[deriving(Hash)]`
for making a type hashable with a stream hash.

Furthermore, it supports custom non-stream-based hashers, such as
if a value's hash was cached in a database.

This does not yet replace the old IterBytes-hash with this new
version.
syntax: make deriving methods take a `push: &|@item|`.
syntax: simplify `#[deriving(Hash)]`
test: generate compile-fail/deriving-span-Hash* tests
std: explain why we use cast::transmute to hash integers
std: remove `StreamHash.input_ref`
std: make the hash tests more complete
std: simplify hash impl macros
std: flesh out the `std::hash` documentation.
std: remove hash::StreamHash, add hash::State