Adds tests with array, temporary, empty product()

My laptop died while doing something gitty, so a few commits got lost
and I had to put them back in this one.
Rewritten to support temporaries

This is basically zip() modified.