Desugar 'if let' into the appropriate 'match'
Add tests for `if let`
Produce a better error for irrefutable `if let` patterns
Rewrite the `if let` error detection

Switch to using the expn_info of the span instead of an attribute on the
arm. This avoids polluting the `--pretty expanded` output with an
attribute that is meaningless at that point, and it avoids reserving an
attribute name for an internal compiler use.

This approach records the sugar in the expn_info the same way macro
expansion does, which parallels the fact that the sugar is basically
another form of macro expansion. It defines a new MacroFormat type so
the diagnostics can avoid printing the notes about expansion.
Only print "irrefutable if-let pattern" errors once

When an `if let` translates into a `match` with more than two arms, we
don't want to print multiple "irrefutable if-let pattern" errors.