MongoEngine sharding framework

Summary:
Framework to allow sharding more easily. Defines the following new meta
items:

* hash_field - field which should be hashed (in the new field, "shard_hash")
* hash_db_field - db_field for shard_hash; used for legacy sharding
                  where the data already exists in Mongo, default is _h
* sharded - set to False if not all documents in the collection have a
            hash (used during migration of legacy collections)

The framework will automatically take care of the hash on
save(), by_id(), and update_one(). Any other general queries that need
it, need to add it explicitly... but, in practice, that's fairly rare
outside of complex structures (like UserProfile) or fine-tuned
optimizations.

Also added a force_insert while I was messing around to more easily make
save() be insert-only without needing to explicitly override the
function. New collections should all set this to true.

Test Plan: Tested in D9550

Reviewers: josh

Maniphest Tasks: T5618

Differential Revision: http://infra1.corp.contextlogic.com/D9551