rustc: Make `monitor` public.

It's harder to run rustc correctly without it.
rustc: Extract --crate-type parsing to its own function

Helpful for users of rustc as a library.
rustc: Pass optional additional plugins to compile_input

This provides a way for clients of the rustc library to add
their own features to the pipeline.
rustc: Allow the crate linked to as 'std' to be customized

This adds the alt_std_name field to the Session's Options type.
I'm using this in an external tool to control which libraries
a crate links to.
Address review feedback
auto merge of #15820 : brson/rust/rustcfront, r=huonw

This fixes some pain points I found while working on a tool that embeds rustc. These changes save me from copy-pasting 500 lines from rustc.

Two refactorings:

* `monitor` is public. Need it to run the compiler properly.
* Extracted parsing of the --crate-type argument.

Two minor features:

* The session's Option type takes an `alt_std_name` that can be used to override the crate that is automatically linked as `extern crate std = "name";`. I'm using this for customization.
* `compile_input` takes a `Option<Plugins>` to customize the compiler pipeline programmatically.

Neither of the two new features are exposed via command line flags since their general utility isn't obvious.