fix fmt! usage
Fix a crash when transmuting non-immediate to immediate types

The code to build the transmute intrinsic currently makes the invalid
assumption that if the in-type is non-immediate, the out-type is
non-immediate as well. But this is wrong, for example when transmuting
[int, ..1] to int. So we need to handle this fourth case as well.

Fixes #7988
rustc: Remove some dead code from method resolution
ToStr for HashMap does not need value to implement Eq or Hash