refs #828 Move collection implementations to a single file,
collection.cpp
refs #828 Add a clean mechanism for coercing a NamespaceDetails to a
subclass
refs #828 Move optimizePK() to OplogCollection, using toSubclass() to
get the correct type in oplog.cpp
refs #828 Move empty() to CappedCollection
refs #828 Remove acquireTableLock() from NamespaceDetails completely,
inline the implementation into beginBulkLoad()
refs #828 Remove noteCommit/noteAbort from NamespaceDetails, use
CappedCollection directly in txn_complete_hooks.cpp
refs #828 Remove validateConnectionId() from NamespaceDetails and add
bulkLoading() instead, which is true for bulk loaded collections.
NamespaceIndex::details uses a BulkLoadedCollection directly if
bulkLoading() is true.
refs #828 Move special capped collection insert/delete interface into
CappedCollection class
refs #828 Move minUnsafeKey to a virtual interface that Capped and Oplog
collections implement. Tailable cursors use the high-level
TailableCursor interface when refreshing their min unsafe end key.
refs #828 Rename toSubclass() to as(), shorter and more consistent with
similar mechanisms (ie: boost)
refs #828 Rename NamespaceIndex to CollectionMap, move it to its own file
refs #828 Give more consistent names to nsdetials_maybe_create (now
_getOrCreateCollection, private to namespace_details.cpp) and
getAndMaybeCreateNS (now getOrCreateCollection)
refs #828 Add Collection and CollectionBase class, replace
NamespaceDetails