Find the latest receipt we have for this user. (Note - there is only one receipt per user, because we are already inside a specific thread or unthreaded list.)
If there is a later synthetic receipt for this user, return that. Otherwise, return the real receipt.
the found receipt info, or undefined if we have no receipt for this user.
Add the supplied receipt to our structure, if it is not earlier than the one we already hold for this user.
The latest receipt info we have, either for a single thread, or all the unthreaded receipts for a room.
userId: ReceiptInfo