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.

cleanup some signatures
Make a PartitionedCollection and PartitionedCursor (that only runs on the partition/primary key)
no support for secondary indexes, fast updates, or bulk loading.

Still need to:
 - (possibly) implement replication
Some replication simplifications in preparation for making the oplog partitioned.
 - Removed cached Collection pointers in oplog.cpp
 - changed how initial sync clones the oplog collections
remove optimize oplog thread
remove purge thread
get partitioned oplog working, no automatic trimming working yet
remove code that checked if oplog data is too old. With partitioned oplog, it is not necessary
add commands (and tests) for replAddPartition and replTrimOplog
add a background thread that does auto-adding and auto-dropping
of partitions for oplog and oplog.refs
remove _lastPurgedGTID and _lastPurgedTS
remove remnants of lastPurgedGTID and lastPurgedTS from heartbeats.

With partitioned collections, we don't care about this data

remove some TODOs
remove partition comment
 - disable renaming
 - get convertToPartitioned working
 - support upgrade of non-partitioned oplog and oplog.refs to partitioned
fix bug
disable replication of partitioned collections
fix bug in writing oplog stuff to secondaries
add simple test that shows cloning of oplog works
add test showing partitioned collections don't work in replication