Make the iterator protocol more explicit

Document the fact that the iterator protocol only defines behavior up
until the first None is returned. After this point, iterators are free
to behave how they wish.

Add a new iterator adaptor Fuse<T> that modifies iterators to return
None forever if they returned None once.
Make Zip iterator short-circuit

Python's zip() short-circuits by not even querying its right-hand
iterator if the left-hand one is done. Match that behavior here by not
calling .next() on the right iterator if the left one returns None.
Fix incorrect strftime error handling in rust_localtime
Closes #8702.
Modernized a few type names in rustc and syntax
auto merge of #8911 : Kimundi/rust/master, r=huonw

Most notable: span -> Span
auto merge of #8276 : kballard/rust/iterator-protocol, r=cmr

r? @thestinger
auto merge of #8913 : poiru/rust/issue-8702, r=cmr

Closes #8702.
touch llvm clean trigger