Implement flexible target specification

See commit message.
But why not?
Yes, this might encourage people to get sloppy and not use the canonical triple.

On the other hand, this strictness will be super-annoying if triple is handed to you by some upstream build script.  Even if you have LLVM installation on hand, I don't know of any LLVM command line utility that would normalize a triple.

I think rustc should accept the same triples that LLVM would accept.  Perhaps it should issue a note or a warning to let the user know that normalization was performed.