Warn on pattern bindings that have the same name as a variant

...of the type being matched.

This change will result in a better diagnostic for code like the following:

```rust
enum Enum {
    Foo,
    Bar
}

fn f(x: Enum) {
    match x {
        Foo => (),
        Bar => ()
    }
}
```

which would currently simply fail with an unreachable pattern error
on the 2nd arm.

The user is advised to either use a qualified path in the patterns
or import the variants explicitly into the scope.
Do not print any warnings if '-A warnings' is specified on the command line
auto merge of #19115 : jakub-/rust/issue-19100, r=alexcrichton

...of the type being matched.

This change will result in a better diagnostic for code like the following:

```rust
enum Enum {
    Foo,
    Bar
}

fn f(x: Enum) {
    match x {
        Foo => (),
        Bar => ()
    }
}
```

which would currently simply fail with an unreachable pattern error
on the 2nd arm.

The user is advised to either use a qualified path in the patterns
or import the variants explicitly into the scope.
Enable dynamically linked snaphots.
Use --opt-level=3 to get mergefunc.
Disable RBML "debugging" to reduce metadata bloat.
rustc: look for crates in lib/rustlib/{triple}/plugin.
mk: support plugin crates.
deriving: move to its own plugin crate.
deriving: fix warnings about deprecated methods.
deriving: avoid using #[deriving] to allow bootstrapping.
syntax: add `#[phase(plugin)] extern crate deriving;` in std_inject.
Add `#[phase(plugin)] extern crate deriving;` to no_std crates.
deriving: fix a couple of minor inefficiencies.
Move deriving(Decodable, Encodable) to libserialize_deriving.
Move deriving(Show) and format_args! to libformat_macros.
syntax: remove obsoleted fmt! macro.
Split rustc's diagnostics pseudo-plugin into its own crate.
syntax: move quasi-quoting (sans its rt module) to a plugin.
hack around deriving and format_macros not having format_args!