Add revert_to_published method.

STUD-1860

OK, @dmitchell has patiently helped me through writing this method. Please review, @dmitchell and @nasthagiri.
To reduce the number of queries, I'm thinking this should perhaps find both the draft and published in one query.
```
   # no draft_xblock_location needed
   query = root_location.to_deprecated_son(prefix='_id.')
   del query['_id.revision']
   versions_found = self.collection.find(query, {'_id': True, 'definition.children': True}, sort=[SORT_REVISION_FAVOR_DRAFT])
   if versions_found.count() == 2:  # found the draft and published. Could actually check, but if pub'd must exist it seems excessive
        self._delete_subtree(root_location, [as_draft])
   else:
        for child in ...
```