MINOR: stream_interface: introduce a new "struct connection" type

We start to move everything needed to manage a connection to a special
entity "struct connection". We have the data layer operations and the
control operations there. We'll also have more info in the future such
as file descriptors and applet contexts, so that in the end it becomes
detachable from the stream interface, which will allow connections to
be reused between sessions.

For now on, we start with minimal changes.
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 9931d28..02b20dd 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -461,8 +461,8 @@
 		fdtab[fd].cb[DIR_WR].f = tcp_connect_write;
 	}
 	else {
-		fdtab[fd].cb[DIR_RD].f = si->sock.read;
-		fdtab[fd].cb[DIR_WR].f = si->sock.write;
+		fdtab[fd].cb[DIR_RD].f = si_data(si)->read;
+		fdtab[fd].cb[DIR_WR].f = si_data(si)->write;
 	}
 
 	fdinfo[fd].peeraddr = (struct sockaddr *)&si->addr.to;
@@ -602,11 +602,11 @@
 	/* The FD is ready now, we can hand the handlers to the socket layer
 	 * and forward the event there to start working on the socket.
 	 */
-	fdtab[fd].cb[DIR_RD].f = si->sock.read;
-	fdtab[fd].cb[DIR_WR].f = si->sock.write;
+	fdtab[fd].cb[DIR_RD].f = si_data(si)->read;
+	fdtab[fd].cb[DIR_WR].f = si_data(si)->write;
 	fdtab[fd].state = FD_STREADY;
 	si->exp = TICK_ETERNITY;
-	return si->sock.write(fd);
+	return si_data(si)->write(fd);
 
  out_wakeup:
 	task_wakeup(si->owner, TASK_WOKEN_IO);