Add ansible as a dependency

Note that ansible is licensed under the GPL which may have
implications for the distribution of Zuul as a whole.

Actually use ansible to launch a hello world test.

Also reorganize the launcher directory to be more like
the mergers: a client and server.

Change-Id: I30f7ed2cadbb7d2381ec477e229d19c9c6e41743
diff --git a/tests/base.py b/tests/base.py
index 90d2df5..13f85cc 100755
--- a/tests/base.py
+++ b/tests/base.py
@@ -48,8 +48,8 @@
 import zuul.scheduler
 import zuul.webapp
 import zuul.rpclistener
-import zuul.launcher.ansible
-import zuul.launcher.gearman
+import zuul.launcher.ansiblelaunchserver
+import zuul.launcher.launchclient
 import zuul.lib.swift
 import zuul.lib.connections
 import zuul.merger.client
@@ -636,7 +636,7 @@
         self.worker.lock.release()
 
 
-class RecordingLaunchServer(zuul.launcher.ansible.LaunchServer):
+class RecordingLaunchServer(zuul.launcher.ansiblelaunchserver.LaunchServer):
     def __init__(self, *args, **kw):
         super(RecordingLaunchServer, self).__init__(*args, **kw)
         self.job_history = []
@@ -977,8 +977,8 @@
                                                            self.connections)
         self.merge_server.start()
 
-        self.launcher = zuul.launcher.gearman.Gearman(self.config, self.sched,
-                                                      self.swift)
+        self.launcher = zuul.launcher.launchclient.LaunchClient(
+            self.config, self.sched, self.swift)
         self.merge_client = zuul.merger.client.MergeClient(
             self.config, self.sched)
 
@@ -1280,7 +1280,8 @@
                 return False
             if server_job.waiting:
                 continue
-            worker_job = self.worker.gearman_jobs.get(server_job.unique)
+            worker_job = self.ansible_server.worker.gearman_jobs.get(
+                server_job.unique)
             if worker_job:
                 if build.number is None:
                     self.log.debug("%s has not reported start" % worker_job)