This involves doing the following:
- Generalizing the PrimaryOnlyServiceTest fixture from primary_only_service_test.cpp.
- Moving DonorStateMachine methods which access Grid and CatalogCacheLoader behind a DonorStateMachineExternalState interface.
- Adding a recipientShardIds field to TypeCollectionDonorFields.
- Coordinator's transition to kInitializing would do insert to config.reshardingOperations and update to config.collections entry for original namespace to set allowMigrations=false and reshardingFields.uuid and reshardingFields.state. It wouldn't fill in the reshardingFields.donorFields for the original namespace yet.
- Coordinator's transition to kPreparingToDonate would do update to config.reshardingOperations, insert to config.collections, config.chunks, and config.tags for temporary resharding namespace, and update to config.collections entry for original namespace to set reshardingFields.donorFields.
- Updating verifyValidReshardingFields() to (1) correct the xor logic and (2) special case kInitializing to say there should be neither donorFields nor recipientFields.