While the simulation is single threaded, because async_receive_from_impl uses
post() to invoke the receive handler it is possible for multiple receive
handlers to be queued up in the io_service at the same time. If this happens
with a shared receive buffer the last packet received will overwrite all the
other packets before they are handled.
The use of post() is necessary to avoid unbounded recursion in the read handler
so each node must get its own buffer.