`ParVec`: A vector that allows concurrent manipulation of non-overlapping slices.

Vectors can safely be operated on concurrently/in-parallel if the concurrent access is to non-overlapping slices and the vector itself is not mutated (length/capacity/reallocation). This struct takes advantage of that, allowing users to "borrow" non-overlapping slices and send them to other threads.

Can also be mapped in parallel.

I put it in the `proto` module because I assume that means `prototype` and I haven't really tried `ParVec` in the wild yet, though I know it does work.

**Edit: See comments for benchmarks.**

I gave the parallel benchmark a head-start using a pre-created task pool instead of spinning one up each iteration, which would make it suffer horribly.
Surprisingly they do! I didn't expect them to work at that depth. I'll fix this in a new commit with the other nit-picks.