Avoid multiple build cancelations

The cancelJobs method can be called multiple times for an item
(but with prime=False).  It was possible for zuul to emit multiple
stop jobs in that case.  To avoid that, only cancel builds which
have not yet reported a result.

Change-Id: I1aec01396fcd317cfe8446c582abdc1e3a933410
diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py
index 4ae7f35..7ee1040 100644
--- a/zuul/manager/__init__.py
+++ b/zuul/manager/__init__.py
@@ -398,6 +398,9 @@
         old_build_set.node_requests = {}
         canceled_jobs = set()
         for build in old_build_set.getBuilds():
+            if build.result:
+                canceled_jobs.add(build.job.name)
+                continue
             was_running = False
             try:
                 was_running = self.sched.launcher.cancel(build)