Implement flexible target specification

See commit message.
These triples aren't LLVM triples at all. We control them, and they are entirely separate. If we need it, we could ship a tool that normalizes common triples to our own. I *really* want to cut down on the awfulness that is triple normalization. I think it's confusing for users and it's unnecessary complexity.