Add `cargo run --example` and `cargo run --bin`

This lets users run any executable from the `examples` or `bin` directories by
passing its name with `--example` or `--bin` flag.

If neither is specified, we fall back to the old behaviour (running the only bin
target in the project, failing if there are more).

Closes #538
Ah yes and the other case is happening because there's a `Target` for each binary with `test` env because the examples and/or tests could actually rely on the binaries themselves.

So what should happen here is:

* When I run `cargo run --name foo`, it should *only* compile the binary target named `foo`.
* When I run `cargo run --example foo`, it should compile *all* binaries, and then compile the example named *foo*, but none of the test binaries should be built.

Does that make sense? I do think that the usage of many many `Target`s is somewhat confusing, sorry about that!