As of right now, Socket.get() and Socket.set() assume that the level parameter which is passed to getsockopt() / setsockopt() os SOL_SOCKET.
However, there exist other options that don't necessarily assume the level parameter is SOL_SOCKET, such as TCP_NODELAY.
To expose these other options, the idea is to replace the tag payload types of the union SocketOption with a tuple of length two comprised of the level and option parameter.