MEDIUM: connection: replace idle conn lists by eb trees

The server idle/safe/available connection lists are replaced with ebmb-
trees. This is used to store backend connections, with the new field
connection hash as the key. The hash is a 8-bytes size field, used to
reflect specific connection parameters.

This is a preliminary work to be able to reuse connection with SNI,
explicit src/dst address or PROXY protocol.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index c3159f5..0dcb0a1 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -3548,17 +3548,17 @@
 		for (newsrv = curproxy->srv; newsrv; newsrv = newsrv->next) {
 			int i;
 
-			newsrv->available_conns = calloc(global.nbthread, sizeof(*newsrv->available_conns));
+			newsrv->available_conns_tree = calloc(global.nbthread, sizeof(*newsrv->available_conns_tree));
 
-			if (!newsrv->available_conns) {
+			if (!newsrv->available_conns_tree) {
 				ha_alert("parsing [%s:%d] : failed to allocate idle connections for server '%s'.\n",
-				    newsrv->conf.file, newsrv->conf.line, newsrv->id);
+				         newsrv->conf.file, newsrv->conf.line, newsrv->id);
 				cfgerr++;
 				continue;
 			}
 
 			for (i = 0; i < global.nbthread; i++)
-				LIST_INIT(&newsrv->available_conns[i]);
+				newsrv->available_conns_tree[i] = EB_ROOT;
 
 			if (newsrv->max_idle_conns != 0) {
 				if (idle_conn_task == NULL) {
@@ -3580,27 +3580,27 @@
 					}
 				}
 
-				newsrv->idle_conns = calloc((unsigned short)global.nbthread, sizeof(*newsrv->idle_conns));
-				if (!newsrv->idle_conns) {
+				newsrv->idle_conns_tree = calloc((unsigned short)global.nbthread, sizeof(*newsrv->idle_conns_tree));
+				if (!newsrv->idle_conns_tree) {
 					ha_alert("parsing [%s:%d] : failed to allocate idle connections for server '%s'.\n",
-					    newsrv->conf.file, newsrv->conf.line, newsrv->id);
+						 newsrv->conf.file, newsrv->conf.line, newsrv->id);
 					cfgerr++;
 					continue;
 				}
 
 				for (i = 0; i < global.nbthread; i++)
-					MT_LIST_INIT(&newsrv->idle_conns[i]);
+					newsrv->idle_conns_tree[i] = EB_ROOT;
 
-				newsrv->safe_conns = calloc(global.nbthread, sizeof(*newsrv->safe_conns));
-				if (!newsrv->safe_conns) {
+				newsrv->safe_conns_tree = calloc(global.nbthread, sizeof(*newsrv->safe_conns_tree));
+				if (!newsrv->safe_conns_tree) {
 					ha_alert("parsing [%s:%d] : failed to allocate idle connections for server '%s'.\n",
-					    newsrv->conf.file, newsrv->conf.line, newsrv->id);
+						 newsrv->conf.file, newsrv->conf.line, newsrv->id);
 					cfgerr++;
 					continue;
 				}
 
 				for (i = 0; i < global.nbthread; i++)
-					MT_LIST_INIT(&newsrv->safe_conns[i]);
+					newsrv->safe_conns_tree[i] = EB_ROOT;
 
 				newsrv->curr_idle_thr = calloc(global.nbthread, sizeof(*newsrv->curr_idle_thr));
 				if (!newsrv->curr_idle_thr)