refactor(net.PacketConn) program against PacketConn

this way it's possible to perform extensive testing using a fake,
in-memory "chaos monkey" packet connection. This in-memory connection
can deterministically...

drop packets
duplicate packets
re-order packets
maliciously modify utp packet headers
send packets to closed connections