Create a CollectionData class that is used in Collection, and have individual Collection types subclass of CollectionData
Create an IndexDetailsBase class and slim down IndexDetails. Idea is that CollectionBase knows it has
an array of IndexDetailsBase, but outsiders can only get an IndexDetails from the Collection. Now, we can
easily subclass IndexDetails for partitioned collections.

getCursor and getKeyAfterBytes are not ideal, and could probably be better. Hacked them up to get moving.