Add a lint for not using field pattern shorthands

Closes #17792.
There's a small subtlety here, which the following example demonstrates:

```rust
struct Struct { x: uint }
const x: uint = 42u;
fn main() {
    match (Struct { x: 1u }) {
        Struct { x: x } => (),
        Struct { x: _ } => ()
    }
}
```

We need to check that the PatIdent here is not resolved to any definition (it can be a constant but I think in some weird cross-crate situations it could also be a variant or a unit struct).

I think this would read well:
```
        let def_map = cx.tcx.def_map.borrow();
        match pat.node {
            ast::PatStruct(_, ref v, _) => {
                for fieldpat in v.iter()
                    .filter(|fieldpat| !fieldpat.node.is_shorthand)
                    .filter(|fieldpat| !def_map.contains_key(fieldpat.node.pat.id)) {
                    match fieldpat.node.pat.node {
                        ast::PatIdent(_, ident, None) if ident.node.as_str()
```