Set build descriptions less often

When busy, Zuul spends a lot of time keeping these up to date,
however, most users of the feature only look at this data after
builds are completed.  Therefore, only set build descriptions
for a build set when that build set is completed (when an item
is reported or reset).

Change-Id: I7c255937f08aef28bdad72e8f523ca34f2c6262c
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 2d074cc..7855f39 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -1366,6 +1366,7 @@
                                    "for change %s" % (build, item.change))
             build.result = 'CANCELED'
             canceled = True
+        self.updateBuildDescriptions(old_build_set)
         for item_behind in item.items_behind:
             self.log.debug("Canceling jobs for change %s, behind change %s" %
                            (item_behind.change, item.change))
@@ -1489,7 +1490,6 @@
 
     def onBuildStarted(self, build):
         self.log.debug("Build %s started" % build)
-        self.updateBuildDescriptions(build.build_set)
         return True
 
     def onBuildCompleted(self, build):
@@ -1499,7 +1499,6 @@
         self.pipeline.setResult(item, build)
         self.log.debug("Item %s status is now:\n %s" %
                        (item, item.formatStatus()))
-        self.updateBuildDescriptions(build.build_set)
         return True
 
     def onMergeCompleted(self, event):