[ReplicaGroupV2] Create CollectiveDeviceList.
[ReplicaGroupV2] Create CollectiveDeviceList.

As part of an effort the speed up compile time, there have been some explorations on different ways to represent replica groups. In order to support these new representations, we need to migrate from directly passing around lists of replica groups (list of list of device). This creates a CollectiveDeviceList class whose purpose is to abstract away the details of replica group representation from usage. We later intend to expand this class to support compact representations.
