Add revert_to_published method.

STUD-1860

OK, @dmitchell has patiently helped me through writing this method. Please review, @dmitchell and @nasthagiri.
```
        draft_course = self._lookup_course(usage_key)
        index_entry = self._get_index_if_valid(usage_key, force)
        published_course = self._lookup_course(usage_key.for_branch('published')) # use enum constant
        new_structure = self._version_structure(draft_course, user_id)
        encoded_block_id = encode_key_for_mongo(usage_key.block_id)
        new_structure['blocks'][encoded_block_id] = published_course['blocks'][encoded_block_id]
        # update index if appropriate and structures
        self.db_connection.insert_structure(new_structure)

        if index_entry is not None:
            # update the index entry if appropriate
            self._update_head(index_entry, usage_locator.branch, new_id)
        
```