std::vec: Replace each_permutation with a Permutations iterator

let mut v = [1, 2, 3];
for perm in Permutations::new(v) {
    // yields 1 2 3 | 1 3 2 | 3 1 2 | 3 2 1 | 2 3 1 | 2 1 3
}

The Permutations iterator is in-place, which is basically the only way
to match the efficiency of each_permutation, which passed a slice to the
same backing vector each time.

each_permutation did however clone all the elements for each iteration,
which we avoid here by using a much smarter order of permutations.
std::vec: Change fn unzip to take an iterator argument

Remove unzip_slice since it's redundant. Old unzip is equivalent to the
`|x| unzip(x.move_iter())`