This class manages a relationship between DistributedObjects that
know about each other, and are expected to be generated together.
Ideally, we should be able to guarantee the ordering of the
generate calls, but there are certain cases in which the objects
may not be generated in the correct order as defined by the
toon.dc file.
To handle cases like these robustly, it is necessary for each
object to deal with the possibility that its companion object has
not yet been generated. This may mean deferring some operations
until the expected companion object has been generated.
This class helps manage that process. To use it, an object should
register its desire to be associated with the other object's doId.
When the other object is generated (or immediately, if the object
already exists), the associated callback will be called. There is
also a timeout callback in case the object never appears.