Detect invalid frames and better handle handshake errors

Uncritically accepting the size given in frames may lead to
.. difficulties. So, look at the size first, then check for the frame
end marker. (Not done yet: check against the frame max)

Make sure errors from parsing frames make their way into either an
'error' event, or a handshake failure.
Clean up frame (error) handling

1. `Connection#step` now takes a (Node.JS-style) callback, rather than
having to mess with `.accept`.

2. `Connection#run` -> `Connection#acceptLoop`, a more fitting name I
think. It's still indirected through `.accept`, so that it can be
swapped out when e.g., closing the connection.

3. While running `acceptLoop`, invalid frames are signalled by a
`'frameError'` event, rather than calling some method. I may as well
use the mechanisms available.
Rename mocknet to util

It's no longer just pretend socket helpers.
Detect frame decoding problems and raise them
Coverage reporting using Istanbul

Nice feature of Istanbul: doesn't necessitate copying files around. It
also has more comprehensive reporting than jscoverage e.g.
Fail async tests fast

1. Both server and client sides must now call `done`
2. Instead of `op(); done()`, which will time out in the case of a
failure, also call done (with the error) in the failure branch.
Remove use of promises from channel machinery

Use callbacks instead. This lets me get rid of sync_defer, so less
code.