Add I/O base type for all client I/O kinds

This the first step to add support for the Brick API USB gadget to brickd.

Also all client I/O is non-blocking to make the *_create functions enable
non-blicking operation and don't have a seperate function for it.

Include the peer port into the name of socket based clients.
Restructure socket creation to better deal with the two ways to get a socket

A socket can either be allocated by the socket() function or by the accept()
function. The former was implemented by socket_create() thr later by
socket_accept(). The problem here is that sockets allocated by socket_accept()
had never see a call to socket_create(). This pattern resulted in ugly logic
to extend Socket by Websocket.

Now, split the socket() call out of socket_create() into a new socket_open()
function. This allows socket_create() to be called for all sockets and
allows for a simpler and nicer implementation of the Websocket type.