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
refs #828 Fix tests
refs #828 Fix flaky test
Merge branch '828'

Conflicts:
	src/mongo/db/commands/mr.cpp
	src/mongo/db/oplog_helpers.cpp
	src/mongo/db/oplogreader.cpp
	src/mongo/db/repl/rs.h
	src/mongo/db/repl/rs_initialsync.cpp
	src/mongo/db/txn_complete_hooks.cpp
	src/mongo/s/d_migrate.cpp
refs #828 Fix assert codes
refs #828 Fix build
Rename 'renameNamespace' to 'renameCollection'
refs #828 Remove namespace_details.{cpp,h} by moving code into
collection.{cpp,h}, fix tests.