Specify monitoring batch size independent of training batch size

This pull request provides greater parity between training and monitoring. Training has both `batch_size` and `batches_per_iter` options to control dataset partitioning, but currently monitoring only has `monitoring_batches`, which is overridden by `batch_size`. I have implemented a separate `monitoring_batch_size` parameter that is passed to `monitor.setup()`, allowing dataset partitioning to be independently handled for both training and monitoring.

To improve backwards compatibility, if neither `monitoring_batch_size` or `monitoring_batches` are set, they default to `batch_size` and `batches_per_iter`, respectively.