Server refactor
This MR is as requested from !483 (closed)
Main contributions of this MR:
- Separate out connection logic from buffering strategy logic
- Moved minor protocol issues out of connection class (namely send greeting)
- Moved ownership of event loop to server class
- Added semaphore wakeup (libuv_async) to server so that new reads / writes would not stall the other loop events
- Differentiated between responding to a specific request/connection and broadcast to all connections. This allows for (eventually) multiple connections per server.
The first commit in the MR is a little heavier than I'd like and I can split it out more if needed.