Track last data transmitted

Useful for determining if a node has timed out
Enable force-closing a connection

`disconnect()` is a graceful close (sends `socket.end()`), while `destroy()` force-closes the socket (does still send a `close` event).
Make `send()` able to assemble the raw message
Handle messages with empty payload better
Increase per-peer buffer size