Change signature of Iterator.size_hint

Remove the Option wrapper around the lower bound. None is semantically
the same as Size(0), so there's no point in having a distinction.
Implement .size_hint() on the remaining Iterator adaptors

Every iterator adaptor now has an implementation of .size_hint() that
makes sense, except for when the default of (0, None) is correct.
Implement size_hint() on all remaining Iterators

Add size_hint() to the Iterators in libextra and the Iterator in
libsyntax.
auto merge of #7570 : kballard/rust/iterator-size-hint, r=thestinger

Change the signature of Iterator.size_hint() to always have a lower bound.

Implement .size_hint() on all remaining iterators (if it differs from the default).