Avoid duplicate processing code with events
When we use event callbacks to react to the appearance of
currently-missing data, we might as well use that as the nominal flow
too: if the data is present, the event callback's underlying listener
will fire immediately, and the callback will be handled straight
away. This avoids duplicating code whenever an event callback is
used.
If performance testing reveals that fast paths are needed, we can
handle that centrally in the event callback mechanism, instead of
repeating it at every call site.
Change-Id: I49791d810946988c704a9cfe24297c977c1c8c84
Signed-off-by: Stephen Kitt <skitt@redhat.com>