Basic command parser and other fixes

Mostly infrastructure so that a real one can be added later, but a very
basic one supporting the "whoami" command exists.

The encapsulation for socket and client was fixed so that the file
descriptor is not needed anywhere outside of server.c/socket.c.
Instead, client's sockinfo member is passed to socket_*().

socket_*() functions should now not need to be called from outside of
either server.c or client.c, as the interface should now work.

socket_read() still uses a file descriptor, as the only callers are
currently (and should remain) server/buffer/client code which finds it
easier to do so.