Bug 898992: l10n.js should keep track of untranslated elements

If a document embeds an inline JSON dictionary, l10n.js translates the document right away without loading other l10n resources.  It usually works fine because our build system ensures the inline JSON dictionary contains all the necessary keys to handle the declarative content; but if an app adds some dynamic content to the document, when the user language is changed there might be some untranslated elements -- e.g. the "Add Contact" form in the Contacts app.

With this patch, l10n.js keeps track of untranslated elements:
* if an inline dictionary is used, untranslated elements will be translated as soon as all external l10n resources are loaded;
* instead of raising a JS warning each time an element can't be translated, l10n.js now sends one unique warning with all missing l10n keys when the document is translated.
Bug 898992: unit tests
Merge pull request #11304 from fabi1cazenave/l10nContacts-bug898992

Bug 898992: l10n.js should keep track of untranslated elements, r=julienw