Notes about synchronization: Much of the work is synchronized on the receivers or messages depending on the work performed.
NOTE: There is no need to internally synchronize the caller handles that.
NOTE: This datastructure should have Set semantics.