Fix unaligned memory accesses on ZeroMQ messages
ZeroMQ does not guarantee to return aligned memory. Consequently, statements like the following causes undefined behavior:
int * header_buf = reinterpret_cast<int*>(zmq_msg_data(&header_msg));
int runner_id = header_buf[0];