Remove memory leak
ROUTER sockets have problems routing if their peers don't have an Id set on their socket
* If the list of workers started with one that wasn't expired then no expired workers would be removed
* Remove performance penalty of repeatedly calling s_clock()
Remove compiler warning of pointless code: testing whether an unsigned var is positive
Clarify example by removing pointless code: destructors always destruct their member containers
msg::unwrap() returns reference to memory that may be deleted by msg::pop_front()

wrap/unwrap() are used to manage string identifiers and so, like most usage of this function, maintain the memory's lifetime via a std::string
* Use C++ containers more appropriate to the task of queuing or random-access/deletion
* Fixed: Workers objects are owned by the broker and, unless idle, leaked upon destruction
* Fixed: Service objects were leaked upon destruction
* When there are multiple workers per service, dispatch a request to the most recently seen idle worker; others might be about to expire and the request will be lost
Code cleanup

* Removed unused predeclaration of broker class
* Friend classes in C++ usually imply incorrect architecture; the services and workers are purely structs used internally by the broker
* Removed virtual-keyword from destructors when the objects are only for internal consumption
* Removed redundant comments
* Removed redundant destructor
* Added appropriate public/private rules for the broker member functions, to aid comprehension of what is internal and vice-versa