Some fixes to diagnostics and lints

I’m not so sure about the way I’ve handled #17567, but at least the error message is an improvement over what it was before (albeit still not quite as good as it was before DST).
I think this would be better to express as a `match`:

```rust
let is_sized = match fcx.ccx.tcx.lang_item.sized_trait() {
    Some(sized_id) => sized_id == trait_ref.def_id,
    None => false
};
```

Or if you feel more adventurous:

```rust
let is_sized = fcx.ccx.tcx.lang_items.sized_trait()
    .map_or(false, |sized_id| sized_id == trait_ref.def_id);
```