test: Disable morestack tests

The new scheduler does not yet implement split stacks
extra: Remove dbg module and rt support code

This stuff is ancient, unused, and tied to oldsched
Resolve globals having different addresses across crates

* All globals marked as `pub` won't have the `internal` linkage type set
* All global references across crates are forced to use the address of the
  global in the other crate via an external reference.
syntax: implement cfg!() which evaluates to true/false where #[cfg] would keep/remove.

Example:

   if cfg!(test) {
      calculation_to_run_only_when_testing();
   }
std: Use `do` blocks instead of `for` with .iter_bytes()
extra: Use `do` instead of `for` in extra::iter
std: Replace `for` with `do { .. }` expr where internal iterators are used
extra: Replace `for` with `do { .. }` expr where internal iterators are used
extra: Use external iterators in bitv implementation

Convert some internally used functions to use a external iterators.

Change all uses of remaining internal iterators to use `do` expr
std: Remove the internal iterator methods from trait Set

.intersection(), .union() etc methods in trait std::container::Set use
internal iters. Remove these methods from the trait.

I reported issue #8154 for the reinstatement of iterator-based set algebra
methods to the Set trait.

For bitv and treemap, that lack Iterator implementations of set
operations, preserve them as methods directly on the types themselves.

For HashSet, these methods are replaced by the present .union_iter()
etc.
std: Replace `for` with `do { .. }` expr in std::gc

Change all users of old-style for with internal iterators to using
`do`-loops.

The code in stackwalk.rs does not actually implement the
looping protocol (no break on return false).

The code in gc.rs does not use loop breaks, nor does any code using it.

We remove the capacity to break from the loops in std::gc and implement
the walks using `do { .. }` expressions.

No behavior change.
std: Change `Times` trait to use `do` instead of `for`

Change the former repetition::

    for 5.times { }

to::

    do 5.times { }

.times() cannot be broken with `break` or `return` anymore; for those
cases, use a numerical range loop instead.
rustc: add a lint for `for`, suggesting `foreach` or `do`.

This is just to aid the transistion to the new `for` loop, by
pointing at each location where the old one occurs.
Remove the pipes compiler

The pipes compiler produced data types that encoded efficient and safe
bounded message passing protocols between two endpoints. It was also
capable of producing unbounded protocols.

It was useful research but was arguably done before its proper time.

I am removing it for the following reasons:

* In practice we used it only for producing the `oneshot` and `stream`
  unbounded protocols and all communication in Rust use those.
* The interface between the proto! macro and the standard library
  has a large surface area and was difficult to maintain through
  language and library changes.
* It is now written in an old dialect of Rust and generates code
  which would likely be considered non-idiomatic.
* Both the compiler and the runtime are difficult to understand,
  and likewise the relationship between the generated code and
  the library is hard to understand. Debugging is difficult.
* The new scheduler implements `stream` and `oneshot` by hand
  in a way that will be significantly easier to maintain.

This shouldn't be taken as an indication that 'channel protocols'
for Rust are not worth pursuing again in the future.
migrate to foreach
Add a boatload of Linux x86/x86-64/arm errnos
auto merge of #8190 : thestinger/rust/for, r=thestinger
Relax some atomic barriers. Loosen up all that tension. There, doesn't that feel good?
Document task killing design and relaxed barrier rationale.
Make a forgotten assert in comm be cfg(test)-dependent