Improved UDP compatibility, fix TCP/SSL read buffer handling, improve UDP/TCP/SSL error passing

Supersedes #595. Requires tessel/firmware#104.
Between https://github.com/joyent/node/blob/029cfc12a0736b0b03d0101d24b8a1a3023137a5/lib/dgram.js#L348 and https://github.com/joyent/node/blob/08a5b442e42ff67bd5666604eebe69f1b4a1c919/src/handle_wrap.cc#L72 it looks like node does intentionally handle double-close as a nop instead of either undefined behavior or a hard error.