MAJOR: session: detach the connections from the stream interfaces

We will need to be able to switch server connections on a session and
to keep idle connections. In order to achieve this, the preliminary
requirement is that the connections can survive the session and be
detached from them.

Right now they're still allocated at exactly the same place, so when
there is a session, there are always 2 connections. We could soon
improve on this by allocating the outgoing connection only during a
connect().

This current patch touches a lot of code and intentionally does not
change any functionnality. Performance tests show no regression (even
a very minor improvement). The doc has not yet been updated.
diff --git a/src/frontend.c b/src/frontend.c
index d4b60db..0adbf8d 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -139,16 +139,16 @@
 		else {
 			char pn[INET6_ADDRSTRLEN], sn[INET6_ADDRSTRLEN];
 
-			conn_get_from_addr(&s->req->prod->conn);
-			conn_get_to_addr(&s->req->prod->conn);
+			conn_get_from_addr(s->req->prod->conn);
+			conn_get_to_addr(s->req->prod->conn);
 
-			switch (addr_to_str(&s->req->prod->conn.addr.from, pn, sizeof(pn))) {
+			switch (addr_to_str(&s->req->prod->conn->addr.from, pn, sizeof(pn))) {
 			case AF_INET:
 			case AF_INET6:
-				addr_to_str(&s->req->prod->conn.addr.to, sn, sizeof(sn));
+				addr_to_str(&s->req->prod->conn->addr.to, sn, sizeof(sn));
 				send_log(s->fe, LOG_INFO, "Connect from %s:%d to %s:%d (%s/%s)\n",
-					 pn, get_host_port(&s->req->prod->conn.addr.from),
-					 sn, get_host_port(&s->req->prod->conn.addr.to),
+					 pn, get_host_port(&s->req->prod->conn->addr.from),
+					 sn, get_host_port(&s->req->prod->conn->addr.to),
 					 s->fe->id, (s->fe->mode == PR_MODE_HTTP) ? "HTTP" : "TCP");
 				break;
 			case AF_UNIX:
@@ -165,14 +165,14 @@
 		char pn[INET6_ADDRSTRLEN];
 		int len = 0;
 
-		conn_get_from_addr(&s->req->prod->conn);
+		conn_get_from_addr(s->req->prod->conn);
 
-		switch (addr_to_str(&s->req->prod->conn.addr.from, pn, sizeof(pn))) {
+		switch (addr_to_str(&s->req->prod->conn->addr.from, pn, sizeof(pn))) {
 		case AF_INET:
 		case AF_INET6:
 			len = sprintf(trash, "%08x:%s.accept(%04x)=%04x from [%s:%d]\n",
 				      s->uniq_id, s->fe->id, (unsigned short)s->listener->fd, (unsigned short)cfd,
-				      pn, get_host_port(&s->req->prod->conn.addr.from));
+				      pn, get_host_port(&s->req->prod->conn->addr.from));
 			break;
 		case AF_UNIX:
 			/* UNIX socket, only the destination is known */