librustc: Forbid `..` in range patterns.

This breaks code that looks like:

    match foo {
        1..3 => { ... }
    }

Instead, write:

    match foo {
        1...3 => { ... }
    }

Closes #17295.

[breaking-change]
Teach libsyntax about `if let`
Desugar 'if let' into the appropriate 'match'
Add tests for `if let`
Produce a better error for irrefutable `if let` patterns

Modify ast::ExprMatch to include a new value of type ast::MatchSource,
making it easy to tell whether the match was written literally or
produced via desugaring. This allows us to customize error messages
appropriately.
Move `if let` behind a feature gate
Update based on PR feedback
Add `if let` to the reference
Update after the fall out from the syntax::ptr changes
Temporarily remove the description for the diagnostic E0162

It turns out that adding new diagnostics is causing link failures
in runpass-full-deps tests. Further investigation pending.
Turn on cfg format warnings
Fix cfg warnings for liblibc
Fix liballoc
Fix libstd
Fix librustrt
Fix libtime
Fix librustc_back
Fix librustc
Fix librustc_llvm
Fix libgreen