iterator: remove `first`

it's the same as `next.unwrap()`, but there's no way to check the
length of an iterator so this isn't a good pattern
iterator: make nth and last return Option

There isn't a way to take the length of any iterator, so failing on a
zero length would make these much less useful.
iterator: reuse iter::to_vec, and use &mut self
iterator: reword docstring
iterator: use advance to implement FilterMapIterator
auto merge of #6589 : thestinger/rust/iterator, r=bstrie