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
Yeah, I wasn't too happy about this either, but I don't know enough about Cargo to spot the right way to do things.

I've just replaced `Compilation`'s `pub tests: Vec<Path>` with `pub tests: Vec<(String, Path)>` (target name / destination pair) which works and already looks better. Are you okay with that or would you prefer a struct instead of the tuple?