Don't "pass ownership" of buffers when sending

This lets you send the same buffer to multiple remotes manually, for
example.  It also just seems like a cleaner API design.
Start huge revamp of net code to add reliability

This adds the skeleton of reliability in n3.  Packets now go out on
different channels (some of which will maintain order on receipt, in the
future), and are acknowledged when received (though they aren't re-sent
yet).  You'll be able to optionally send packets that don't need
ack'ing.

This lays the foundation for future work, but doesn't actually improve
the protocol very much as of yet.
Proper support for silent rules
Add some "generic" list code to avoid duplication

This uses some dirty C trickery to define a list object that can be used
with multiple types.  I'm not proud of it, but it unifies some duplicate
code and adds a couple functions/behaviors I was missing.