Filesearch fixes for crosses.

Currently Rustc has no way to differentiate crates based on the crate's target. That is, getting Rustc to use host platform crates for syntax phase dependencies (by using -L paths) whilst also using the same filesearch paths to resolve link phase crates results in either version mismatches or multiple matching crate errors. A truly vexing problem whilst cross compiling.

To remedy this, I added a new metadata tag, tag_crate_target, and added it to the crate metadata. I also slightly modified the build pipeline so that resolving syntax extensions for crosses will search through rustc's set of crates, instead of always searching though the target set (but only while cross compiling). Additionally, while cross compiling, rustc will *always* reset its cstore, lest host platform dep libraries leak in.

This isn't user visible, but I also added a Triple structure, which for the most part mimics LLVM's behavior. I realize it wasn't strictly speaking necessarily, but it made working with the triple in filesearch && loader a tad bit easier.