std::str: Remove functions count_chars, count_bytes

These are very easy to replace with methods on string slices, basically
`.char_len()` and `.len()`.

These are the replacement implementations I did to clean these
functions up, but seeing this I propose removal:

/// ...
pub fn count_chars(s: &str, begin: uint, end: uint) -> uint {
    // .slice() checks the char boundaries
    s.slice(begin, end).char_len()
}

/// Counts the number of bytes taken by the first `n` chars in `s`
/// starting from byte index `begin`.
///
/// Fails if there are less than `n` chars past `begin`
pub fn count_bytes<'b>(s: &'b str, begin: uint, n: uint) -> uint {
    s.slice_from(begin).slice_chars(0, n).len()
}
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.
reduce the size of UnsafeArc from 2 words to 1
Correct the sources of glob imports

Closes #8847
Correct indent with trailing spaces/comments on previous line
One indent after open paren with no argument
Make the iterator protocol more explicit

Document the fact that the iterator protocol only defines behavior up
until the first None is returned. After this point, iterators are free
to behave how they wish.

Add a new iterator adaptor Fuse<T> that modifies iterators to return
None forever if they returned None once.
Make Zip iterator short-circuit

Python's zip() short-circuits by not even querying its right-hand
iterator if the left-hand one is done. Match that behavior here by not
calling .next() on the right iterator if the left one returns None.
Multiline comments with leading *s line up the *s
Align field names in struct expressions with fields on same line as the opening curly brace
Add missing space
doc/rust.md: Missing in keyword on keyword list.
auto merge of #8857 : blake2-ppc/rust/std-str-remove, r=thestinger

These are very easy to replace with methods on string slices, basically
`.char_len()` and `.len()`.

These are the replacement implementations I did to clean these
functions up, but seeing this I propose removal:

/// ...
pub fn count_chars(s: &str, begin: uint, end: uint) -> uint {
    // .slice() checks the char boundaries
    s.slice(begin, end).char_len()
}

/// Counts the number of bytes taken by the first `n` chars in `s`
/// starting from byte index `begin`.
///
/// Fails if there are less than `n` chars past `begin`
pub fn count_bytes<'b>(s: &'b str, begin: uint, n: uint) -> uint {
    s.slice_from(begin).slice_chars(0, n).len()
}
auto merge of #8867 : thestinger/rust/smaller-arc, r=alexcrichton
auto merge of #8869 : alexcrichton/rust/issue-8847-fix-unused, r=huonw

Closes #8847
auto merge of #8872 : MicahChalmer/rust/emacs-indent-fix, r=pnkfelix

This fixes some, but not all, of the issues mentioned in #8787