TrafficShapedSocket::write has a somewhat narrow contract with its caller.
max may be 0 or >0, 0 meaning no limit, >0 meaning limit.
this was incorrectly implemented before where we'd assume max means always
limit, resulting in unlimited calls always resulting in 0 data getting
sent as max would be 0.
the revised code explicitly handles 0 meaning no limit. this is in line
with the behavior of PacketSocket, the only other implementation of
a shaped socket.