panel launcher applet: Handle invalid .desktop files better

In 2.2, we began preventing invalid launchers from being created -
which in turn would cause drag-and-drop and removal to mess up due
to mismatched array indexes.

Turns out there are other reasons a desktop file may become invalid,
mainly due to a program getting uninstalled.

Now, instead of relying on perfect 1:1 matching of entries in gsettings
to entries in the applet's launcher list, keep our own internal mapping
of the "panel-launchers" key contents, so we can track which ones are
valid (visible, and involved in DnD and other user interaction) and
which ones aren't.