[New custom build] Implement the new custom build command

Does include:
 - The build script is compiled in `target/build/$pkg`, its output is written in the same directory in the `output` file, and it has `target/build/$pkg/out` available to write temporary files
 - The `output` files are later loaded by each rustc invocation and other custom build command, in order to retreive the rustc-flags or `DEP_` variables.
 - Internal rename from `plugin` to `for_host`
 - A different system for passing command descriptions to the shell (internal change)
 - Deprecation of the old custom build script system with a warning if it is being used

Does not include:
 - Support for `links`, I plan to add this after this PR is merged
 - `DEP_<links>_<key>`: You just need to uncomment a block of code, but this can't be implemented without support for `links`
 - Build dependencies, I plan to add this after this PR is merged ; this probably conflicts a lot with #735, if I implement this now, I'll need to rewrite half of the code when rebasing
 - Tests to check that `rustc-flags` are correctly passed to rustc, because rustc doesn't support the `-l` flag yet. I'll add this to the PR once rust supports it (or maybe even before if I compile the fork of rustc that has it).
 - The test supposed to check whether a custom build script failure triggers a compilation failure for the whole project is commented out, because I didn't find a way to get the name of the package to match the exact error message. **This will need to be fixed before merging**.
 - There's no feedback of the new system in the `Compilation` struct
 - The `build` directory is not used when determining the fingerprint, something that was apparently done for the `native` directory

I recommend reviewing commit by commit. I implemented each feature one by one (tests should pass for each individual commit).

cc #610

I think instead of deserializing/reserializing each step of the way that we're going to want a shared context between all workers coordinating this information back and forth. The `Context` may want to store `Arc<State>` or even `Arc<Mutex<State>>` to transmit this information.