Refactor libsyntax Visitor impls to use default methods.
syntax: Remove use of Either in parse.rs

The arg or capture type alias was actually never used for the capture
case, so the code is simplified with `Either<arg, ()>` replaced by `arg`
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 #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
auto merge of #9183 : alexcrichton/rust/issue-5794, r=catamorphism

Closes #5794
Add an SendStr type

A SendStr is a string that can hold either a ~str or a &'static str.
This can be useful as an optimization when an allocation is sometimes needed but the common case is statically known.

Possible use cases include Maps with both static and owned keys, or propagating error messages across task boundaries.

SendStr implements most basic traits in a way that hides the fact that it is an enum; in particular things like order and equality are only determined by the content of the wrapped strings.
Replaced std::rt:logging::SendableString with SendStr
Added Iterbytes Impl to SendStr
Added tests for using an SendStr as key in Hash- and Treemaps