rustdoc: Fix up some bugs with bounds

This PR adds support in rustdoc for properly naming lifetimes in bounds, instead of just showing `'static` for everything. It also adds support for unboxed function sugar bounds, which were also previously rendered as `'static`.
Anything which handles the `tcx_opt()` case is basically something called along the `rustdoc --test` path (if I recall correctly...). If you can bootstrap and run `make check` without having `UnknownBound`, feel free to remove it! You can also be lossy for things like this when `tcx_opt()` returns `None` because the only purpose is to crawl the documentation to learn about tests.