only print packet size once per packet
Implement multiple frames/packet and smart fragmentation

Previously, this code sent all frames in one packet. Now it splits
the frames into multiple packets based on the MTU. This allows
multiple UDP packets to go out instead of one large fragmented one.

If a fragment of a large packet is dropped, we lose the whole packet, we lose multiple frames, and must retransmit entirely.
If a one small packet of many is dropped, we lose a subset of frames, which can be retransmitted later.