notifyqueue: Dedup pspecs when adding

The previous code dedup'd when thawing and threw nasty warnings your way
if you notified too often. This can now easily be avoided.

Performance should be roughly identical, as both are O(n²).
diff --git a/gobject/gobjectnotifyqueue.c b/gobject/gobjectnotifyqueue.c
index e53e22b..8aa1485 100644
--- a/gobject/gobjectnotifyqueue.c
+++ b/gobject/gobjectnotifyqueue.c
@@ -119,22 +119,10 @@
   }
 
   pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem;
-  /* set first entry to NULL since it's checked unconditionally */
-  pspecs[0] = NULL;
+
   for (slist = nqueue->pspecs; slist; slist = slist->next)
     {
-      GParamSpec *pspec = slist->data;
-      guint i;
-
-      /* dedup, make pspecs in the list unique */
-      for (i = 0; i < n_pspecs; i++)
-        {
-          if (pspecs[i] == pspec)
-            break;
-        }
-
-      if (i == n_pspecs) /* if no match was found */
-        pspecs[n_pspecs++] = pspec;
+      pspecs[n_pspecs++] = slist->data;
     }
   g_datalist_id_set_data (&object->qdata, context->quark_notify_queue, NULL);
 
@@ -178,8 +166,11 @@
 	pspec = redirect;
 	    
       /* we do the deduping in _thaw */
-      nqueue->pspecs = g_slist_prepend (nqueue->pspecs, pspec);
-      nqueue->n_pspecs++;
+      if (g_slist_find (nqueue->pspecs, pspec) == NULL)
+        {
+          nqueue->pspecs = g_slist_prepend (nqueue->pspecs, pspec);
+          nqueue->n_pspecs++;
+        }
 
       G_UNLOCK(notify_lock);
     }