Parallelism-Aware Batch Scheduling: Enabling High-Performance and Fair Memory Controllers