It's not immediately obvious to me that this trait is necessary... as in, do we lose anything by just having `trait Hasher<H> { ... }`, `trait Stream { .. }` and `trait StreamHash<S: Stream> { ... }`?

All I can see it doing is adding the `impl Hash for MyType {}` line everywhere, without actually being able to be used, since it doesn't assert or provide any useful-for-hashing properties about the type. Implementations of `Hasher` always have to use a constraint more specific than `Hash` to be able to do anything useful.