std::str: Use CharIterator in NormalizationIterator

Just to simplify and not have the iteration logic repeated in multiple places.
std::str: Fix bug in .slice_chars()

`s.slice_chars(a, b)` did not allow the case where `a == s.len()`, this
is a bug I introduced last time I touched the method; add a test for
this case.
extra::dlist: Fix bug in Eq::ne
drop some redundant Ord method implementations
partial revert of 31fa865

Ratio is generic and so might contain a non-total orderable type. It
should not use the default Ord implementation.
doc/rust.md: Missing in keyword on keyword list.
auto merge of #8858 : blake2-ppc/rust/small-bugs, r=alexcrichton

Fix a bug in `s.slice_chars(a, b)` that did not accept `a == s.len()`.

Fix a bug in `!=` defined for DList.

Also simplify NormalizationIterator to use the CharIterator directly instead of mimicing the iteration itself.
auto merge of #8878 : toqueteos/rust/patch-1, r=sanxiyn

As promised on #8876.
Revert "Teach the makefile to use multiple src-base's"

This reverts commit 43f851d2cb3976655078f032dc1a8cb88f1c8deb.
Revert "Teach compiletest to use multiple --src-base's"

This reverts commit 8a07f5708196dd72ec030018c2a215a4dd823b2e.
Revert "src/test/bench: restructure"

This reverts commit 14cdc26e8a7794e437946f46df5769362b42acdf.
auto merge of #8886 : cmr/rust/test-restructure, r=cmr
rustc: Change a stray error! statement to debug!
fix various warnings
rustc: capitalize types in rscope.rs
std: Add a fixme for when we add Trait::<for T>::static_method()
std: Add a file-renaming function to std::os
rustpkg: Add a not_a_workspace condition
rustpkg: Allow package directories to appear in the RUST_PATH

This commit adds a rustpkg flag, --rust-path-hack, that allows
rustpkg to *search* inside package directories if they appear in
the RUST_PATH, while *building* libraries and executables into a
different target directory.

This behavior is hidden behind a flag because I believe we only
want to support it temporarily, to make it easier to port servo to
rustpkg.

This commit also includes a fix for how rustpkg fetches sources
from git repositories -- it uses a temporary directory as the target
when invoking `git clone`, then moves that directory into the workspace
if the clone was successful. (The old behavior was that when the
`git clone` failed, the empty target directory would be left lying
around anyway.)
auto merge of #8831 : catamorphism/rust/extend_rust_path, r=catamorphism

r? @brson

@metajack requested the ability to violate the "only workspaces can be in the RUST_PATH" rule for the purpose of bootstrapping Servo without having to restructure all the directories. This patch gives rustpkg the ability to find sources if a directory in the RUST_PATH directly contains one of rustpkg's "special" files (lib.rs, main.rs, bench.rs, or test.rs), even if it's not a workspace. In this case, it puts the build artifacts in the first workspace in the RUST_PATH.

I'm not sure whether or not it's a good idea to keep this feature in rustpkg permanently. Thus, I added a flag, ```--use-rust-path-hack```, and only enabled it when the flag is set.