* Enhance EC balancing to separate parity and data shards across racks
* Rename avoidRacks to antiAffinityRacks for clarity
* Implement server-level EC separation for parity/data shards
* Optimize EC balancing: consolidate helpers and extract two-pass selection logic
* Add comprehensive edge case tests for EC balancing logic
* Apply code review feedback: rename select_(), add divide-by-zero guard, fix comment
* Remove unused parameters from doBalanceEcShardsWithinOneRack and add explicit anti-affinity check
* Add disk-level anti-affinity for data/parity shard separation
- Modified pickBestDiskOnNode to accept shardId and dataShardCount
- Implemented explicit anti-affinity: 1000-point penalty for placing data shards on disks with parity (and vice versa)
- Updated all call sites including balancing and evacuation
- For evacuation, disabled anti-affinity by passing dataShardCount=0