Batching

Closes #282
If these were `&mut Vec<T>` it wouldn't need to be initialized with all-`None`s. It could push into the (pre-existing) allocation, and the lengths can be compared afterwards for correctness if necessary.