`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.
Yeah this leaks memory:

```
==13580== 48 bytes in 1 blocks are definitely lost in loss record 35 of 82
==13580==    at 0x10025760D: je_mallocx (jemalloc.c:1560)
==13580==    by 0x100002105: heap::imp::allocate::h0061015ace00b6911fa (in target/collect-4527ef8f5d273416)
==13580==    by 0x100002051: heap::allocate::h0061015ace00b691haa (in target/collect-4527ef8f5d273416)
==13580==    by 0x100001FD8: heap::exchange_malloc::h0061015ace00b691lca (in target/collect-4527ef8f5d273416)
==13580==    by 0x10016FC49: arc::Arc$LT$T$GT$::new::h8584627053897063471 (in target/collect-4527ef8f5d273416)
==13580==    by 0x10016FA06: proto::par_vec::ParVec$LT$T$GT$::new::h18097762443770259697 (par_vec.rs:24)
==13580==    by 0x10016F477: proto::par_vec::test::test_unwrap_safely::hc7412f83ab04615aBdx (par_vec.rs:127)
==13580==    by 0x1001BA163: thunk::F.Invoke$LT$A$C$$u{20}R$GT$::invoke::h18379140141600779905 (in target/collect-4527ef8f5d273416)
==13580==    by 0x1001C4D41: thunk::F.Invoke$LT$A$C$$u{20}R$GT$::invoke::h11523673724729141453 (in target/collect-4527ef8f5d273416)
==13580==    by 0x1001BB7A8: thunk::F.Invoke$LT$A$C$$u{20}R$GT$::invoke::h5098577315900394533 (in target/collect-4527ef8f5d273416)
==13580==    by 0x1001BBCA8: rt::unwind::try::try_fn::h17165358201265017980 (in target/collect-4527ef8f5d273416)
==13580==    by 0x100246B28: rust_try_inner (in target/collect-4527ef8f5d273416)
```