Replace each_permutation and unzip, unzip_slice in vec

Replace each_permutation with a Permutation iterator. The new permutation iterator is more efficient since it uses an algorithm that produces permutations in an order where each is only one element swap apart, including swapping back to the original state with one swap at the end.

Also update `unzip` to work with an iterator argument.