MEDIUM: connections: Introduce a new XPRT method, start().

Introduce a new XPRT method, start(). The init() method will now only
initialize whatever is needed for the XPRT to run, but any action the XPRT
has to do before being ready, such as handshakes, will be done in the new
start() method. That way, we will be sure the full stack of xprt will be
initialized before attempting to do anything.
The init() call is also moved to conn_prepare(). There's no longer any reason
to wait for the ctrl to be ready, any action will be deferred until start(),
anyway. This means conn_xprt_init() is no longer needed.
diff --git a/src/backend.c b/src/backend.c
index 67a7625..80f00f2 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1535,14 +1535,19 @@
 	/* Copy network namespace from client connection */
 	srv_conn->proxy_netns = cli_conn ? cli_conn->proxy_netns : NULL;
 
-	if (!conn_xprt_ready(srv_conn) && !srv_conn->mux) {
+	if (!srv_conn->xprt) {
 		/* set the correct protocol on the output stream interface */
-		if (srv)
-			conn_prepare(srv_conn, protocol_by_family(srv_conn->dst->ss_family), srv->xprt);
-		else if (obj_type(s->target) == OBJ_TYPE_PROXY) {
+		if (srv) {
+			if (conn_prepare(srv_conn, protocol_by_family(srv_conn->dst->ss_family), srv->xprt)) {
+				conn_free(srv_conn);
+				return SF_ERR_INTERNAL;
+			}
+		} else if (obj_type(s->target) == OBJ_TYPE_PROXY) {
+			int ret;
+
 			/* proxies exclusively run on raw_sock right now */
-			conn_prepare(srv_conn, protocol_by_family(srv_conn->dst->ss_family), xprt_get(XPRT_RAW));
-			if (!(srv_conn->ctrl)) {
+			ret = conn_prepare(srv_conn, protocol_by_family(srv_conn->dst->ss_family), xprt_get(XPRT_RAW));
+			if (ret < 0 || !(srv_conn->ctrl)) {
 				conn_free(srv_conn);
 				return SF_ERR_INTERNAL;
 			}
@@ -1580,10 +1585,6 @@
 			srv_conn->flags |= CO_FL_SOCKS4;
 		}
 	}
-	else if (!conn_xprt_ready(srv_conn)) {
-		if (srv_conn->mux->reset)
-			srv_conn->mux->reset(srv_conn);
-	}
 	else {
 		/* Currently there seems to be no known cases of xprt ready
 		 * without the mux installed here.
@@ -1633,6 +1634,7 @@
 			return SF_ERR_INTERNAL;
 		}
 	}
+	conn_xprt_start(srv_conn);
 
 	/* We have to defer the mux initialization until after si_connect()
 	 * has been called, as we need the xprt to have been properly