collections: allow `HashMap` to work with generic hashers
std: cut down on the memory usage of `SipHasher`
auto merge of #12544 : erickt/rust/hash, r=acrichto

This PR allows `HashMap`s to work with custom hashers. Also with this patch are:

* a couple generic implementations of `Hash` for a variety of types.
* added `Default`, `Clone` impls to the hashers.
* added a `HashMap::with_hasher()` constructor.