use net.PacketConn interface

Great work here.

It would be nice to be able to test the UTP protocol using a local, in-memory packet connection. This way, one can design fast, focused tests that put the protocol under stress. The in-memory packet connection could...

* drop packets
* duplicate packets
* re-order packets
* maliciously modify utp packet headers
* send packets to closed or non-existent connections
 
Could also write test cases that trigger selective ACKs or even manipulate timing to simulate buffer delay.