Implement .size_hint() on new vec iterators
Update size_hint()s on std::iterator Iterators

Add size_hint() to a few Iterators that were missing it.

Update a couple of existing size_hint()s to use checked_add() instead of
saturating_add() for the upper bound.
Refactor type combining to use default methods.  Woohoo!

This commit removes the "super_*" functions from
typeck::infer::combine, and adds them as default methods on the
Combine trait instead, making it possible to remove a lot of
boilerplate from the various impls of Combine.

I've been wanting to do this for over a year.  In fact, it was my
original motivation for default methods!

It might be possible to tighten things up even more, but this is the
bulk of it.