Basic Ensembles support.
Updated to produce the same order on all devices.  Drew’s description:

- Create a NSDictionary for all objects in the ordered set. The key is the global id, and the value is the initial index of the object before the reordering, ie, the original order before the change.
- Replace the dictionary values for the global ids that are moved with the new index.
- Sort the dictionary based on the index values. Where values clash, sort based on global id.

In practice there are a few more steps but the outcome is the same.