asynchronization (untested)

- Rewrite the entire socket system to use Epoll and be async.
- Rewrite the client system to handle the new socket system
- Implemented a buffered packet implementation so epoll can figure out when packets need to be sent
- Added a new config value "ReadTimeout"
- Fix some bugs from the previous commit
- Remove a bunch of things out of main.c