Implement flexible target specification

See commit message.
This seems deceptively similar to `i686-apple-darwin`, was that intentional? Did LLVM rename this recently as well?