Add a lint for not using field pattern shorthands

Closes #17792.
I tried that and it looks like the lint just stopped triggering for anything. I’m thinking of trying something like this:

```rust
                for fieldpat in v.iter()
                    .filter(|fieldpat| !fieldpat.node.is_shorthand)
                    .filter(|fieldpat| match def_map.find(&fieldpat.node.pat.id) {
                        Some(&def::DefConst(_)) => false,
                        Some(&def::DefVariant(_)) => false,
                        _ => true,
                    }) {
```

but I’m not sure if that will work, and if it does how I’ll handle the tuple/unit struct case.