std::iter: Introduce .by_ref() adaptor

Creates a wrapper around a mutable reference to the iterator.

This is useful to allow applying iterator adaptors while still
retaining ownership of the original iterator value.

Example::

   let mut xs = range(0, 10);
   // sum the first five values
   let partial_sum = xs.by_ref().take(5).fold(0, |a, b| a + b);
   assert!(partial_sum == 10);
   // xs.next() is now `5`
   assert!(xs.next() == Some(5));
std::rt::uv::net: Handle `read_start` error

cc #9605
std::rt: Add NotConnected to IoErrorKind
rt::io::net::tcp: Fix eof_twice tests on Win32

cc #8811
rustdoc: Use privacy visibility for pruning

This commit ends rustdoc's approximation of privacy and instead uses the result
of the various compiler passes instead.

Closes #9827
rustdoc: Don't abort if there's nothing to document

Instead there's no index.html file emitted because there wasn't anything to
document.

Closes #9828
fix bounds checking failure message

casting the `uint` to an `int` can result in printing high values as
negative intege
fix overflow on bounds checks

Closes #9020
use element count in slices, not size in bytes

This allows the indexing bounds check or other comparisons against an
element length to avoid a multiplication by the size.
remove executable flag from source file
Require module documentation with missing_doc

Closes #9824
Build a few extra features into format! parsing

* Allow named parameters to specify width/precision
* Intepret the format string '0$' as "width is the 0th argument" instead of
  thinking the lone '0' was the sign-aware-zero-padding flag. To get both you'd
  need to put '00$' which makes more sense if you want both to happen.

Closes #9669
rename `base_and_len` -> `base_and_byte_len`
introduce `base_and_len` fns for element length
Added Result implementations for ToStr and fmt::Default
auto merge of #9892 : Kimundi/rust/ResultToStr, r=alexcrichton
auto merge of #9885 : thestinger/rust/vector, r=brson

The goal here is to avoid requiring a division or multiplication to compare against the length. The bounds check previously used an incorrect micro-optimization to replace the division by a multiplication, but now neither is necessary *for slices*. Unique/managed vectors will have to do a division to get the length until they are reworked/replaced.
auto merge of #9634 : blake2-ppc/rust/by-ref-iter, r=thestinger

std::iter: Introduce .by_ref() adaptor

Creates a wrapper around a mutable reference to the iterator.

This is useful to allow applying iterator adaptors while still
retaining ownership of the original iterator value.

Example::

    let mut xs = range(0, 10);
    // sum the first five values
    let partial_sum = xs.by_ref().take(5).fold(0, |a, b| a + b);
    assert!(partial_sum == 10);
    // xs.next() is now `5`
    assert!(xs.next() == Some(5));

---

This adaptor requires the user to have good understanding of
iterators or what a particular adaptor does. There could be some
pitfalls here with the iterator protocol, it's mostly the same issues
as other places regarding what happens after the iterator
returns None for the first time.

There could also be other ways to achieve the same thing, for
example Implementing iterator on `&mut T` itself:
`impl <T: Iterator<..>> Iterator for &mut T`  but that would only
lead to confusion I think.
auto merge of #9833 : alexcrichton/rust/fixes, r=brson

Commits have all the fun details
auto merge of #9721 : klutzy/rust/uv-net-read-fix, r=alexcrichton

See #9605 for detailed information.

This also fixes two tests of #8811.