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.
repr: print the name of structs
repr: remove trailing {} from unit-like structs
librustc: Add export_name attribute to specify symbol name.
Cleanup concurrency tests

In this commit I:
- removed unneeded heap allocations
- added extra whitespace to crowded expressions
- and removed unneeded syntax
auto merge of #8905 : sstewartgallus/rust/cleanup_tests, r=bblum

In this commit I:
- removed unneeded heap allocations
- added extra whitespace to crowded expressions
- and removed unneeded syntax

Also, CC @bblum although this change is fairly unobjectionable.
document why some tests are xfail-fast
hypothetical fix for #8865.
auto merge of #8899 : thestinger/rust/repr, r=huonw
small cleanup of previous commit with mucho comments.
auto merge of #8903 : luqmana/rust/en, r=thestinger

Fixes #8735.
auto merge of #8907 : pnkfelix/rust/fsk-fix-makefile-8865, r=thestinger

Fix #8865.
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
Renamed syntax::ast::ident -> Ident