Clean deletion of a Version
When a Version is deleted, we are triggering `clear_artifacts` _and_ `symlink_project` but the later is triggered _before_ the object deletion; so, I think if the task is ran before it's effectively deleted the symlink won't be properly synced:

https://github.com/rtfd/readthedocs.org/blob/5472906a067adc60f42556108993255393408410/readthedocs/builds/models.py#L181-L187

To fix this we could chain some Celery task in this order:

1. trigger `clear_artifacts`
1. delete the Version object
1. trigger `symlink_projects`

Take into account that the first and last have to be executed in a broadcast call but the second one should be executed just once since it affects the database.

> This method `Version.delete` is not used in the codebase at all, so I'm not sure if this is a priority. I found that all the Versions are activated/deactivated but not deleted.

Ref: https://github.com/rtfd/readthedocs.org/pull/3649#issuecomment-370915276
diff --git a/readthedocs/builds/models.py b/readthedocs/builds/models.py
index a4b272abe..dd4f71a1a 100644
--- a/readthedocs/builds/models.py
+++ b/readthedocs/builds/models.py
@@ -213,10 +213,18 @@ class Version(models.Model):
     def delete(self, *args, **kwargs):  # pylint: disable=arguments-differ
         from readthedocs.projects import tasks
         log.info('Removing files for version %s', self.slug)
-        broadcast(type='app', task=tasks.clear_artifacts, args=[self.get_artifact_paths()])
         broadcast(
-            type='app', task=tasks.symlink_project, args=[self.project.pk])
+            type='app',
+            task=tasks.clear_artifacts,
+            args=[self.get_artifact_paths()],
+        )
+        project_pk = self.project.pk
         super(Version, self).delete(*args, **kwargs)
+        broadcast(
+            type='app',
+            task=tasks.symlink_project,
+            args=[project_pk],
+        )
 
     @property
     def identifier_friendly(self):
['readthedocs/builds/models.py']