Rename FnStyle trait to Unsafety.
Parse `unsafe trait` but do not do anything with it beyond parsing and integrating into rustdoc etc.
Parse `unsafe impl` but don't do anything particularly interesting with the results.
Implement `unsafe trait` semantics.
Add a bunch of new tests per Alex's suggestion.
auto merge of #19703 : nikomatsakis/rust/unsafe-trait, r=acrichto

This PR allows declaring traits and impls as `unsafe`. An `unsafe` trait requires an `unsafe` impl. An `unsafe` impl does not permit unsafe code within its interior (unless that code is contained within an unsafe block or unsafe fn, as normal). The commits are standalone.

r? @alexcrichton 
cc #13231
Merge remote-tracking branch 'upstream/master'