fix zip

should not evaluate second parameter if first parameter is empty
add zip laziness law
ImmutableArray zip laziness test