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.
Elle me semble bizarre cette implémentation de flush, vu que dans le cas de Socket, on va virtuellement jamais avoir une écriture complètement bloquée dans le pipeline, y'a pas réellement de raison d'avoir une implémentation de flush dans ce cas-ci.
Au final, j'imagine que l'implémentation de flush pourrait juste être un bête `fun flush do end`, non ?