Add a lint mode for unused unsafe blocks/functions
core: remove unnecessary unsafe blocks/functions
std: remove unused unsafe blocks/functions
rustc: remove unnecessary unsafe blocks/methods
syntax: remove unnecessary unsafe blocks/functions
test: remove unnecessary unsafe blocks/functions
auto merge of #5797 : alexcrichton/rust/issue-1913, r=catamorphism

Closes #5487, #1913, and #4568

I tracked this by adding all used unsafe blocks/functions to a set on the `tcx` passed around, and then when the lint pass comes around if an unsafe block/function isn't listed in that set, it's unused.

I also removed everything from the compiler that was unused, and up to stage2 is now compiling without any known unused unsafe blocks.

I chose `unused_unsafe` as the name of the lint attribute, but there may be a better name...