network: disconnect logic, queueing

Rename disconnect to sendDisconnect; set and enforce disconnect timeout (2 seconds).
Move peer deletion back to peerserver server and restore connection timeout logic (rather than waiting on remote to drop connection).
Update worst-peer removal to exclude peers which have been sent disconnect packet but still connected.
Refactor write() loop into single method w/independent lock for queue to allow for queue-pushes while buffers are written.
Update disconnect to immediately close socket and skip sending disconnect packet when appropriate.

I'll be running this overnight to test stability on mac and tomorrow setup a VM to test Linux.