Add a put_back() method to the Peekable iterator.

Sometimes, rather than peek()’ing and then potentialy calling next() to go past the item you’ve already handled, it’s more convenient to call next() first and potentially put the item "back" in the iterator, to be consumed by another part of the code.

As shown in tests, the parameter need not actually come from the iterator, but it usually is in more typical usage.

(I assumed this addition was small enough to not need an RFC.)
By returning the passed-in value in the error case, that makes the mechanism to intentionally replace an existing value look like

```rust
match iter.put_back(val) {
    Err(val) => {
        let _ = iter.next(); // let _ in case the return value is a Result
        iter.put_back(val).unwrap();
    }
    Ok(()) => {}
}
```

That seems rather excessive.