Implement flexible target specification

See commit message.
This duplicates the modules listed above, so you may want to do something like:

```rust
macro_rules! each_target( ($macro:ident) => (
    $macro!(...)
    $macro!(...)
    ...
) )

macro_rules! each_target_stmt( ($macro:ident) => ({
    each_target!($macro)
}) )
```