lib/socket: fix, update style and intro features

This is a pretty big update to the `socket` module. It appeared to be broken. Did someone test it since the last modifications to streams and read_line?

* Update and cleanup the style in the first 3 or 4 commits.
* Fix (some of) what was broken.
* Revamp the API with a distinction between listening sockets and stream sockets (making it closer to Ruby and C#). This is the most important commit "lib/socket: distinguish `TCPServer` from `TCPStream`".
* Intro additionnal features used by Mineit: non-blocking `TCPServer` sockets and `TCPStream::flush`.

Still to do:
* Add `Error` support to the API.
* Rename `socket_c` to `native_socket`.
* Fix `SocketObserver` and underlying C implementation.
Hm kay ! En effet dans le cas du jeu, ça peut s'avérer problématique :/
Mais du coup, est-ce que ça ne vaudrait pas le coup de passer à genre des sockets UDP ou directement du TCP_NODELAY pour toute la durée de vie de l'application ?
Mais ça reste du détail rendu la, le flush peut rester tel quel du coup