Eliminate duplicate LUT menu item warnings

The issue was caused by some weirdness in how DefaultMenuService lazily
constructs its menus. It recursively calls addModules from the
rootMenus() method. This results in at most one level of recursion
though, so is technically sound. But the exact implementation was rather
silly because it resulted in certain modules being added twice in some
cases. This commit changes the handling of ModulesAddedEvents to add
*all* known modules iff rootMenus is not yet initialized; nd only in the
case of rootMenus already existing does onEvent(ModulesAddedEvent) hand
off to addModules with its designated collection of modules.

This change also synchronizes the addModules method "just in case"; it
could be the case that a ModulesAddedEvent fires on the EDT at the same
time as a non-EDT thread is initializing rootMenus for the first time
(and hence inside the addModules method as well). This synchronization
may not be sufficient to prevent all race conditions (e.g.: should
rootMenus() itself be synchronized?) but for now I want to avoid
over-synchronizing things to avoid negative performance impact.