Implement flexible target specification

See commit message.
As, you can have something like this:

```rust
#[deriving(Decodable)]
struct DecodableTarget {
    required_field1: String,
    optional_field2: Option<String>,
    ...
}

impl DecodableTarget {
    fn to_target(self) -> Target {
        let DecodableTarget { name, each, field, to, get, unused, warnings } = self;
        Target { ... }
    }
}
```