The work class is used to inform the io_service when work starts and
finishes. This ensures that the io_service object's run() function
will not exit while work is underway, and that it does exit when there is
no unfinished work remaining.

The work class is copy-constructible so that it may be used as a data member
in a handler class. It is not assignable.