QuerySet.modify() method to provide find_and_modify() like behaviour

Adds a new `QuerySet` method to provide `find_and_modify()` like behaviour as requested in #408. Unlike #421 provides all pymongo's `find_and_modify()` features like `new=True` and `remove=True` and supports MongoEngine's `.only()` and `.order_by()` modifiers.