use pimpl pattern in worker and coord engines to avoid cluttering headers
make msg.cpp functions tolerate multi-frame messages. Refactor pub/sub code in the various engine classes. Start writing better tests of worker_engine
significant improvements; basic skeleton of worker_engine and its do_run() method