libcore: Simplify Enumerate, Zip::next_back

Use ExactSize::len() and defer to its decisions about overly defensive
assertions. Remove the length double-check and simply put a failure
case if the Zip finds an uneven end in .next_back().

Fixing this up since I think I wrote this, and it's been known to
confuse rusties (PR #15886).
Actually, strictly speaking you can just have the a_sz > b_sz check, because in the else branch if a_sz = b_sz, then the range is empty and the loop doesn't run.

Not sure what's the most efficient/readable here.