MEDIUM: threads/listeners: Make listeners thread-safe

First, we use atomic operations to update jobs/totalconn/actconn variables,
listener's nbconn variable and listener's counters. Then we add a lock on
listeners to protect access to their information. And finally, listener queues
(global and per proxy) are also protected by a lock. Here, because access to
these queues are unusal, we use the same lock for all queues instead of a global
one for the global queue and a lock per proxy for others.
diff --git a/src/session.c b/src/session.c
index 54a879b..3753a2c 100644
--- a/src/session.c
+++ b/src/session.c
@@ -57,8 +57,8 @@
 			fe->fe_counters.conn_max = fe->feconn;
 		if (li)
 			proxy_inc_fe_conn_ctr(li, fe);
-		totalconn++;
-		jobs++;
+		HA_ATOMIC_ADD(&totalconn, 1);
+		HA_ATOMIC_ADD(&jobs, 1);
 	}
 	return sess;
 }
@@ -69,7 +69,7 @@
 	session_store_counters(sess);
 	vars_prune_per_sess(&sess->vars);
 	pool_free2(pool2_session, sess);
-	jobs--;
+	HA_ATOMIC_SUB(&jobs, 1);
 }
 
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */