Promote unreachable code to being a lint attribute
Fix a bug with HashMap::consume
Rewrite deriving(Decodable, Encodable)

Now it uses the generic deriving code and should in theory work in all cases.
auto merge of #6851 : alexcrichton/rust/bugfixes, r=pcwalton

Closes #5090 by using the excellent new generic deriving code

Promotes the unreachable code attribute to a lint attribute (instead of always being a warning)

Fixes some edge cases when creating hashmaps/hashsets and also when consuming them. (fixes #5998)