Avoid temporary allocation in Zip() iteration

Also adds tests