Add slice_capacity() methods to ~[T] and Vec<T>

slice_capacity() provides the ability to produce a slice bounded by the
capacity of the vector instead of its length. This is meant to be used
in conjunction with set_len() so you can populate the uninitialized
portion of the vector before setting the length instead of after.
io: Add .read_at_least() to Reader

Reader.read_at_least() ensures that at least a given number of bytes
have been read. The most common use-case for this is ensuring at least 1
byte has been read. If the reader returns 0 enough times in a row, a new
error kind NoProgress will be returned instead of looping infinitely.

Also add .push() and .push_at_least() companion methods.

Stop using try_finally() in .push_exact() and instead use the new
.slice_capacity() functionality.
Remove Reader.fill() and Reader.push_exact()

Both methods ended up just being thin wrappers around read_at_least()
and push_at_least().
Swap argument order for read_at_least/push/push_at_least

Taking the &mut pointer first prevents calling .len() on that value for
the length argument. By swapping the order of arguments so the &mut
pointer is last, this simplifies things for callers.

Previously:

    let len = buf.len();
    try!(reader.read_at_least(buf, len));

Now:

    try!(reader.read_at_least(buf.len(), buf));
Remove Reader.push()

Reader.push(len, buf) is equivalent to
Reader.push_at_least(0, len, buf).
auto merge of #13127 : kballard/rust/read_at_least, r=brson

Reader.read_at_least() ensures that at least a given number of bytes
have been read. The most common use-case for this is ensuring at least 1
byte has been read. If the reader returns 0 enough times in a row, a new
error kind NoProgress will be returned instead of looping infinitely.

Also add .push() and .push_at_least() companion methods.

Refs #13119.