* Use rvalue move to receive accepted sockets * Split asio dependent APIs to their own class and file * Update documentation * Organize code into different files * Make some members private * Rename things for clarity