Don't crash when checking types with only region parameters for destructor safety

This branch has a fix for #15557 (a2bcef9) as well as a variety of patches I found useful while debugging this issue. These include adding `Show` impls to a variety of types, including the majority of `syntax::ast` and some of `middle::ty`.
@alexcrichton is the two-space indentation here acceptable?