registry: add UnitHash to published UnitStates

This introduces a new field in UnitStates containing the string representing
the Hash of the associated Unit, to disambiguate between UnitStates published
with the same name but actually representing different Units.

To facilitate this, the UnitStateGenerator unfortunately needs to maintain a
synchronized map to track the hashes of the units to which it is subscribed.
(Ideally this would have remained in the Agent, but since the Agent no longer
has responsibility for publishing UnitStates, the Hash needs to propagate to
the UnitStatePublisher somehow.)