Dynamic batch sizes

This lets us scale batch sizes up or down depending on CPU speed. On fast machines we'll use larger batches and higher quality interactive rendering; slower machines will use correspondingly smaller batches and they'll become more responsive at the cost of quality.