MAJOR: stream_int: use a common stream_int_shut*() functions regardless of the data layer

Up to now, we had to use a shutr/shutw interface per data layer, which
basically means 3 distinct functions when we include SSL :
  - generic stream_interface
  - sock_raw
  - sock_ssl

With this change, the code located in the stream_interface manages all the
stream_interface and buffer updates, and calls the data layer hooks when
needed.

At the moment, the socket layer hook had been implicitly considered as
being a regular socket, so the si_shut*() functions call the normal
shutdown() and EV_FD_CLR() functions on the fd if a socket layer is
defined. This may change in the future. The stream_int_shut*()
functions don't call EV_FD_CLR() so that they can later be embedded
in lower layers.

Thus, the si->data->shutr() is not called anymore and si->data->shutw()
is called to close the data layer only (eg: only for SSL).

Proceeding like this is very important because it's the only way to be
able not to rely on these functions when called from the connection
handlers, and call the data layers' instead.
diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h
index 91691c0..724c27f 100644
--- a/include/proto/stream_interface.h
+++ b/include/proto/stream_interface.h
@@ -35,6 +35,8 @@
 void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg);
 int conn_si_send_proxy(struct connection *conn, unsigned int flag);
 void stream_sock_update_conn(struct connection *conn);
+int stream_int_shutr(struct stream_interface *si);
+int stream_int_shutw(struct stream_interface *si);
 
 extern struct sock_ops stream_int_embedded;
 extern struct sock_ops stream_int_task;
@@ -164,13 +166,15 @@
 /* Sends a shutr to the connection using the data layer */
 static inline void si_shutr(struct stream_interface *si)
 {
-	si_data(si)->shutr(si);
+	if (stream_int_shutr(si))
+		EV_FD_CLR(si_fd(si), DIR_RD);
 }
 
 /* Sends a shutw to the connection using the data layer */
 static inline void si_shutw(struct stream_interface *si)
 {
-	si_data(si)->shutw(si);
+	if (stream_int_shutw(si))
+		EV_FD_CLR(si_fd(si), DIR_WR);
 }
 
 /* Calls the data state update on the stream interfaace */