SERVER-13635: allow smoke.py to use alternate storage engines
SERVER-14378: IndexCatalog should not rely on system.indexes
SERVER-14378: Cloner shouldn't use system.namespaces
SERVER-14378: cloner shouldn't use system.indexes but listIndexes
SERVER-2442: fix db fetching in listCollections command
SERVER-14378: clean list(Collections|Indexes)
SERVER-14378: clean up cloner changes for no system namespaces
SERVER-14680 code reorganization to allow TopoCoord to link
SERVER-14680 remove topology coordinator mock -- not needed
SERVER-13951: Add rollback of collection metadata

This implements rollback of collection creation or dropping, including
associated indexes.
SERVER-14680 use real topocoord in replcoord test
SERVER-14680 remove incomplete unit test
SERVER-14378 fix duplicate assert codes
SERVER-13635 Use StringData and StringMap in DBHolder
SERVER-14584 Use correct algorithm in BtreeLogic::Builder

Both algorithms cover phases 2 and 3 of forground index building. Importantly
they both take as input pre-sorted data that has already been extracted from
the raw documents (phase 1).

OLD ALGORITHM:
  Phase 2:
    Add all keys to buckets. When a bucket gets full, create a new bucket and
    link it as the original bucket's parent pointer. At the end of the stage
    we have a linked-list of leaf nodes starting as the left-most corner.

  Phase 3:
    Walk the linked produced by phase 2, and build the layer above the leaves.
    With each bucket, except for the last (right-most), pop* its highest key
    and add it to the bucket that will be it's parent. If the current parent
    bucket is full a new one is added to higher-layer linked list as in
    phase 1. Phase 3 is repeated on the new higher-layer linked list until you
    get a layer with a single bucket which is marked as the root of the tree.

    * Importantly, popping a key is what sets the nextChild pointer on a
    bucket.  It is set to what used to be the prevChildNode of the key that is
    popped.  A major flaw of this algorithm is that because no key is ever
    popped from the root, its nextChild pointer is never filled in.

NEW ALGORITHM:
  Phase 2:
    Add all keys to buckets. When a bucket gets full, pop the highest key
    (setting the nextChild pointer of the bucket to the prevChild of the
    popped key), add the popped key to a parent bucket, and create a new right
    sibling bucket to add the new key to. If the parent bucket is full, this
    same operation is performed on the parent and all full ancestors. If we
    get to the root and it is full, a new root is created above the current
    root. When creating a new right sibling, it is set as its parent's
    nextChild as all keys in the right sibling will be higher than all keys
    currently in the parent.

  Phase 3:
    Does nothing. This may go away soon.

Non-exhaustive list of benefits to the new algorthm:
* Generates a valid btree.
* Doesn't require a second pass over all of the buckets in the index. This can
  be significantly faster for indexes that don't fit in ram.
SERVER-14584 Clean up BtreeLogic::pushBack/_pushBack naming

There are no functional changes, other than the file:line that would be
printed on invariant failures.
SERVER-13951 Use a WriteUnitOfWork for each document in update and delete
SERVER-14604: Add replSetGetConfig command
SERVER-13833 userAdminAnyDatabase role should be able to create and drop indexes on admin.system.users and admin.system.roles
Revert "SERVER-14604: Add replSetGetConfig command"

This reverts commit 172d4f6f8bd09d0b2b77d9fb3bf280d01cfb72a1.