Fragment payloads larger than negotiatied frame_max

Publishing a frame larger than the negotiated frame_max causes rabbitmq to sever the connection. This patch implements simple fragmentation of the payload into small enough Body frames to keep the server happy.

A side benefit of this patch is more correct negotiation of heartbeat and channel_max along with frame_max.