MEDIUM: servers: Reorganize the way idle connections are cleaned.

Instead of having one task per thread and per server that does clean the
idling connections, have only one global task for every servers.
That tasks parses all the servers that currently have idling connections,
and remove half of them, to put them in a per-thread list of connections
to kill. For each thread that does have connections to kill, wake a task
to do so, so that the cleaning will be done in the context of said thread.
diff --git a/src/haproxy.c b/src/haproxy.c
index b66f9bf..9ae0939 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -2437,13 +2437,6 @@
 			free(s->safe_conns);
 			free(s->idle_orphan_conns);
 			free(s->curr_idle_thr);
-			if (s->idle_task) {
-				int i;
-
-				for (i = 0; i < global.nbthread; i++)
-					task_free(s->idle_task[i]);
-				free(s->idle_task);
-			}
 
 			if (s->use_ssl || s->check.use_ssl) {
 				if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->destroy_srv)
@@ -2537,6 +2530,8 @@
 	free(global.desc);    global.desc = NULL;
 	free(oldpids);        oldpids = NULL;
 	task_free(global_listener_queue_task); global_listener_queue_task = NULL;
+	task_free(idle_conn_task);
+	idle_conn_task = NULL;
 
 	list_for_each_entry_safe(log, logb, &global.logsrvs, list) {
 			LIST_DEL(&log->list);