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.)
It's runtime failure though. If you could produce compile-time failure that would be great, but I'm pretty sure that requires dependent types.

We should not be introducing runtime failure except when we have to. Certainly we should not introduce it when there's no way to explicitly check ahead-of-time if a given operation will fail, and there is in fact no way to test if `put_back()` will fail.

We could of course merely make the `peeked` field public (instead of adding `put_back()`), thus allowing the user to manipulate it however they please. But as long as it's private, I think having this operation do the equivalent of `mem::replace()` is appropriate.