Implement flexible target specification

See commit message.
I commented above, but it seems like this link line should be in the compiler rather than in the target specification.