A new implementation for zip() that avoids the following pitfalls of the one it replaces:
1. It works on infinite streams.
2. It works on parallel streams and preserves parallelism.
3. It avoids the allocation on intermediate staging data structures.

Use the new zip() function in one of the tests.
Make the 2 zip() methods that work on IntStreams use the new zip() spliterator based implementation of zip().