Add a ?fd argument to Lwt_io.{open_connection,with_connection,establish_...

...server}.

The rationale is that one might want to perform sockopts to the
sockets created by those functions. They should therefore not
internally create a file descriptor for their underlying socket
without presenting a way for the user to do sockopts on them. This
patch makes it possible to provide a fd to use instead of creating a
new one, fixing this issue without changing the current interface.