Batching

Closes #282
To make this less SYF, this could be `pub fn batch<'a, ...>(&'a self, ...) -> Result<LightBatch<'a, L, T>, BatchError>` and use a `RefCell` for accessing the arrays. This is what the `TypedArena` does in Rust. It requires that the `LightBatch` can't outlive that particular `Context`, which is a step forward, but doesn't prevent using that `LIghtBatch` with other `Context`s. For this, we'd need dependantly typed lifetimes, which Niko has planned for after 1.0 I believe (for exactly this sort of usecase)