demodeing, un-gc-ing

It looks to me like the string_reader and tt_reader structs are
GC pointers only because they predate the modern borrow system.
This commit leaves the type names string_reader and tt_reader alone
(they still refer to GC-ed pointers), but internally the functions
now use borrowed pointers to refer to these structures. My guess
would be that it's possible to move this change outward and not
use the GCed pointers at all, but that change looks like it could be
a larger one. Actually, I'm delighted at how quick this change was.
lines too long
Fix some bugs with -W unused-imports

1. Don't warn about anything not used in the prelude which is autmoatically
   injected, accomplished with a test that the span is equal to a dummy span.
2. Don't warn about unused imports from the injected intrinsic module,
   accomplished by testing against the name of the imported module
3. If anything is used from a glob import, don't warn about the glob import.
4. If an import imports more than one thing, and none of them are used, only
   issue a warning once

Also updated the unused-imports-warn test to have stricter requirements on
error messages.
Don't warn when imported traits are indeed used
rt: Add rust_try_get_current_task
Make foreign calls work outside of tasks. #4451
Rewrite the exchange allocator to work without an active scheduler. #4457
Fix sample program to compile in modern rust
Change pretty-exact to pp-exact
auto merge of #4832 : sanxiyn/rust/pretty-exact, r=graydon
Merge pull request #4619 from brson/exchange

Some work on freestanding Rust: foreign calls, exchange allocator
auto merge of #4791 : jbclements/rust/demodeing-and-deGCing, r=jbclements,brson

r?

It looks to me like the string_reader and tt_reader structs are
GC pointers only because they predate the modern borrow system.
This commit leaves the type names string_reader and tt_reader alone
(they still refer to GC-ed pointers), but internally the functions
now use borrowed pointers to refer to these structures. My guess
would be that it's possible to move this change outward and not
use the GCed pointers at all, but that change looks like it could be
a larger one. Actually, I'm delighted at how quick this change was.
Moved experimental compiler flags to -Z (#4740)
auto merge of #4803 : alexcrichton/rust/fix-unused-imports, r=graydon

The first commit message has most of the comments, but this pull request basically fixes a lot of issues surrounding the `unused_imports` warning/deny attribute.

Before this patch there were these problems:

1. Unused imports from `prelude.rs` were warned about with dummy spans, leading to a large number of confusing warnings.
2. Unused imports from `intrinsic.rs` were warned about with the file `<intrinsic>` which couldn't be forced to go away
3. Methods used from imported traites (like `io::WriterUtil`) resulted in an unused warning of the import even though it was used.
4. If one `use` statement imported N modules, M of which weren't used, M warning statements were issued.
5. If a glob import statement was used, each public export of the target module which wasn't used had a warning issued.

This patch deals with all these cases by doing:

1. Ignore unused imports from `prelude.rs` (indicated by a dummy span of 0)
2. Ignore unused imports from `intrinsic.rs` (test on the imported module name, is there a better way?)
3. Track when imported modules are used as candidates for methods, and just assume they're used. This may not end up being the actual case, but in theory not warning about an unused thing is worse than warning about a used thing.
4. Only issue one warning statement
5. Only issue one warning statement.

This is the first time I've edited the compiler itself, and I tried to keep up with the style around, but I may have missed something here or there...
Added a few missing 'pub's
librustc: Lots of de-muting. rs=demuting
auto merge of #4833 : pcwalton/rust/demuting, r=pcwalton
add a BaseIter implementation for PriorityQueue
Fix const enums better: let them have the same alignment as an "opaque enum".
Pad out enum consts to the expected size; makes enums in tuples work.

This is wasted space if the const is just an enum, but optimizing that
case without breaking everything else is an issue that can be addressed
separately.