Implement parallel compilation

This commit implements the -j flag in the `cargo_rustc` module, using the
primitives from the other commits. The default parllelism is 1 (like with
make).

This change also brings proper freshness propagation instead of the hokey logic
of once something is compiled, "compile everything to the right as well".
This possibly leaves other things running in the background, right? Is it worth doing something like

```rust
{
    println!("Build failed, waiting for other jobs to finish...");
    for _ in rx.iter() {}

    return Err(e)
}
```

(Presumably with something more appropriate than `println!`.) I guess it could even collect any errors that occured in the running jobs, to display as many errors as possible; although that seems like it would be difficult to make the output useful.