Add a lint for not using field pattern shorthands

Closes #17792.
auto merge of #17813 : P1start/rust/lint-field-shorthand, r=huonw

Closes #17792.
Update tests with the new error messages
Only include variable IDs in diagnostics when there's more than one

Diagnostics such as the following

```
mismatched types: expected `core::result::Result<uint,()>`, found `core::option::Option<<generic #1>>`
<anon>:6     let a: Result<uint, ()> = None;
                                       ^~~~
mismatched types: expected `&mut <generic #2>`, found `uint`
<anon>:7     f(42u);
               ^~~
```

tend to be fairly terse to new users. While specific type var IDs are valuable in
diagnostics that deal with more than one such variable, in practice many messages
only mention one. In those cases, leaving out the specific number makes the messages
slightly less terrifying.
Update tests with the new diagnostic tweaks