extra::test: Use Result instead of Either.

OptRes was combining a successful value with an error message, which
fits the Result type perfectly.
std::logging: Use a more specific enum than Either
extra::workcache: Remodel the (internal) struct Work

Using an enum with two cases for `Work` reveals simpler code than the
previous `Option<Either<X, Y>>` representation.
Add Orderable bound to num::Primitive
Pass a more proper span to the syntax expanders

Closes #5794
auto merge of #9176 : brson/rust/issue-9129, r=catamorphism

Servo is hitting this problem, so this is a workaround for lack of a real solution.

No tests because I couldn't actually reproduce the problem with either of the testcases in #9129
Remove all usage of change_dir_locked

While usage of change_dir_locked is synchronized against itself, it's not
synchronized against other relative path usage, so I'm of the opinion that it
just really doesn't help in running tests. In order to prevent the problems that
have been cropping up, this completely removes the function.

All existing tests (except one) using it have been moved to run-pass tests where
they get their own process and don't need to be synchronized with anyone else.

There is one now-ignored rustpkg test because when I moved it to a run-pass test
apparently run-pass isn't set up to have 'extern mod rustc' (it ends up having
linkage failures).
auto merge of #9185 : alexcrichton/rust/less-changing-directories, r=huonw

While usage of change_dir_locked is synchronized against itself, it's not
synchronized against other relative path usage, so I'm of the opinion that it
just really doesn't help in running tests. In order to prevent the problems that
have been cropping up, this completely removes the function.

All existing tests (except one) using it have been moved to run-pass tests where
they get their own process and don't need to be synchronized with anyone else.

There is one now-ignored rustpkg test because when I moved it to a run-pass test
apparently run-pass isn't set up to have 'extern mod rustc' (it ends up having
linkage failures).
Get rid of unused SimpleVisitor stuff.
auto merge of #9115 : erickt/rust/master, r=erickt

This is a series of patches to modernize option and result. The highlights are:

* rename `.unwrap_or_default(value)` and etc to `.unwrap_or(value)`
* add `.unwrap_or_default()` that uses the `Default` trait
* add `Default` implementations for vecs, HashMap, Option
* add  `Option.and(T) -> Option<T>`, `Option.and_then(&fn() -> Option<T>) -> Option<T>`, `Option.or(T) -> Option<T>`, and `Option.or_else(&fn() -> Option<T>) -> Option<T>`
* add `option::ToOption`, `option::IntoOption`, `option::AsOption`, `result::ToResult`, `result::IntoResult`, `result::AsResult`, `either::ToEither`, and `either::IntoEither`, `either::AsEither`
* renamed `Option::chain*` and `Result::chain*` to `and_then` and `or_else` to avoid the eventual collision with `Iterator.chain`.
* Added a bunch of impls of `Default`
* Added a `#[deriving(Default)]` syntax extension
* Removed impls of `Zero` for `Option<T>` and vecs.
auto merge of #9156 : sfackler/rust/buffered-fix, r=huonw

This is a workaround for #9155. Currently, any uses of BufferedStream
outside of libstd ICE.
auto merge of #9160 : alexcrichton/rust/local-data-docs, r=huonw

Remove references to local_data::Key and only mention the macro for how to
construct new keys into local data.
auto merge of #9162 : alexcrichton/rust/issue-9123, r=catamorphism

Closes #9123
auto merge of #9165 : klutzy/rust/newrt-file-fix, r=sanxiyn

It was broken on win32 because of header inconsistency.
auto merge of #9174 : thestinger/rust/bot, r=catamorphism

An expression such as `bottom == not_bottom` or `not_bottom == bottom`
already compiled, but this fixes the case where both sides are `bottom`.
std::rt: Add a standalone sleep function.
auto merge of #9178 : lkuper/rust/docs, r=catamorphism
auto merge of #9180 : blake2-ppc/rust/reduce-either, r=catamorphism

Work a bit towards #9157 "Remove Either". These instances don't need to use Either and are better expressed in other ways (removing allocations and simplifying types).
auto merge of #9181 : lkuper/rust/libsyntax-default-methods-refactor, r=alexcrichton

I'm getting the three `make check` failures mentioned in issue #9127, which I also get building master.
auto merge of #9182 : bjz/rust/master, r=brson

Somehow this was missed!

cc #4819