[libcommhistory] Speed up ContactResolver by removing looping

Instead of going through ContactListener which only provides unhelpful
contactUpdated signals, use the SeasideCache directly and get helpful
addressResolved callbacks.

Look up resolved addresses in a hash directly instead of looping over
the private data structures.

Fill in all the resolved contacts when the events are ready, instead
of looping over all the events whenever something changes.

Credit to John Brooks for the idea of bypassing ContactListener.