Handshake

Fixes #67, #105, #108 (thanks to awesome async.js). A partial fix for #94, there's just no client UI for it.