1) The transaction log now writes a 4-byte header containing the type of message which follows the header. This allows us to future-proof the transaction log in order to allow BLOBs to be written in chunks to the log file along with GPB Transaction messages.
2) The algorithm which writes Transaction messages to the transaction log has been improved. Instead of 3 separate calls to pwrite(), I have now reduced that to a single call to pwrite() and a raw buffer is used to construct the raw bytes that get written in bulk to the transaction log at the atomic offset.
3) Update the transaction_reader and transaction_writer programs for the above changes.