compilation error regexp specific to rustc.

Fix #6887.
revisions to emacs compilation regexp, more readable and robust.
extend file regexp to match files with embedded spaces.
Since we assume that GDB output is UTF-8, make sure it is so on all platforms.
Otherwise it'll choose some "appropriate" platform-specific default (e.g. CP1252 on Windows).
Un-disabled debug info tests on Windows.
Add script and tests for using keywords as identifiers
std: Make vec::from_fn failure-safe
auto merge of #8766 : brson/rust/vecfromfn, r=alexcrichton

A recently-enabled test of this is causing valgrind failures.
rustpkg: Test that different copies of the same package ID can exist in multiple workspaces

The test checks that rustpkg uses the first one, rather than complaining
about multiple matches.

Closes #7241
rustpkg: Implement --version command-line option

Now, rustpkg --version does something useful!
auto merge of #8712 : catamorphism/rust/rustpkg-issue-7241, r=pcwalton

r? @brson ...multiple workspaces

The test checks that rustpkg uses the first one, rather than complaining
about multiple matches.

Closes #7241
Add a Default trait.
Fix deriving-zero test
auto merge of #8438 : cmr/rust/default, r=thestinger
Fix valgrind suppression on mac

This callstack changed when the FFI did. I am still a little frightened by
this suppression.
std: Make vec::from_elem failure-safe
auto merge of #8739 : fhahn/rust/ticket_2275, r=brson

This is a pull request for #2275

I've created a small python script to generate test files for a list of keywords (as break do else enum extern false fn for if impl let loop match mod mut priv pub ref return self static struct super true trait type unsafe use while), but I'm not really sure where to put it. I've added the created files as well.

I did not use 

     fn main() {
        let $KW = "foo"; //~ error
        println($KW); //~ error
    } 

as template, because for return, self, ref, loop, mut and break this does not raise an error in the ```println``` line, only in the ```let``` line.
Rewrote module tutorial
auto merge of #8747 : pnkfelix/rust/fsk-issue6887-fix-emacs-compilation-regexp, r=graydon

Fix #6887
Rewrite pass management with LLVM

Beforehand, it was unclear whether rust was performing the "recommended set" of
optimizations provided by LLVM for code. This commit changes the way we run
passes to closely mirror that of clang, which in theory does it correctly. The
notable changes include:

* Passes are no longer explicitly added one by one. This would be difficult to
  keep up with as LLVM changes and we don't guaranteed always know the best
  order in which to run passes
* Passes are now managed by LLVM's PassManagerBuilder object. This is then used
  to populate the various pass managers run.
* We now run both a FunctionPassManager and a module-wide PassManager. This is
  what clang does, and I presume that we *may* see a speed boost from the
  module-wide passes just having to do less work. I have no measured this.
* The codegen pass manager has been extracted to its own separate pass manager
  to not get mixed up with the other passes
* All pass managers now include passes for target-specific data layout and
  analysis passes

Some new features include:

* You can now print all passes being run with `-Z print-llvm-passes`
* When specifying passes via `--passes`, the passes are now appended to the
  default list of passes instead of overwriting them.
* The output of `--passes list` is now generated by LLVM instead of maintaining
  a list of passes ourselves
* Loop vectorization is turned on by default as an optimization pass and can be
  disabled with `-Z no-vectorize-loops`