Add initial support for a new formatting syntax

The new macro is available under the name ifmt! (only an intermediate name)
auto merge of #8245 : alexcrichton/rust/fmt2, r=graydon

This is a reopening of #8182, although this removes any abuse of the compiler internals. Now it's just a pure syntax extension (hard coded what the attribute names are).
Switch to using .enumerate() some places in _match.
Fix vector pattern matching. Closes #6909.