libcore: Make `ChainIterator` take two different-typed `Iterator`s.

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