agent: change unit state publishing model

This establishes N goroutines (I suggest 5, but it could be 1 to keep closer
to the existing behaviour) which are solely responsible for publishing to the
Registry. These goroutines are select()ing on a queue channel, where each item
(string) indicates that they should publish a UnitState corresponding to that
name.

They retrieve this UnitState from a name->state mapping which only ever 
contains the _latest_ UnitState for a particular name.

- The former publishAll() will now simply trigger a publishing of every
 UnitState in the cache and update every UnitState in the mapping
- Any updates from the UnitStateGenerator will result in a trigger event
 and update the latest UnitState in the mapping
This mutex actually needs to stay. The `pruneCache` and the iteration over `p.cache` need to have a consistent view.