Reduce Buffer creation and copy on message send

Rather than allocate new buffers for every frame, reuse buffers for
frame start and frame end. Directly pass the caller's buffer to socket
write instead of copying it first.

In my testing, this results in a 33% speedup for message sends.