libcore: Make `ChainIterator` take two different-typed `Iterator`s.
auto merge of #6177 : gifnksm/rust/iter-chain, r=thestinger

`T: Iterator<A>` and `U: Iterator<A>` should be able to `chain` whether `T` and `U` are same or not.