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).