Fix parentMessageAPI vs. codapPhone race

[#79814268]

Unfortunately, the current design of iframePhone doesn’t provide builtin namespacing, or a way for an iframePhone endpoint to find and “join” a previously-instantiated iframePhone endpoint in the same page. This means that if the parentMessageAPI (used to communicate with e.g., interactives.html on lab.concord.org) is instantiated in before the exportController/dgExporter is initialized, then the ‘hello’ message sent by the parentMessageAPI is received by CODAP, which responds with the queued codap-present message. If dgExporter starts listening *after* the message is processed by the parentMessageAPI, then it never hears the codap-present message.

This is a race in the current setup because, at least in Chrome and Firefox, the dgExporter *usually* started listening before the ‘codap-present’ message was actually dispatched to the iframe. But this was not guaranteed as the message was definitely *sent* before the dgExporter started listening.