For addons doing many operations finding duplicate nodifiers can be
a bottleneck. This makes sense, because the runtime was quadratic.
For every new notifier, all previous notifiers were checked in the
worst case. This patch should eliminate that bottleneck by making
the runtime constant (per-notifier) instead, by storing notifiers
in a set as well as a queue.
The simplest way to build the required behavior was by adding
a small class to provide the necessary interface on top of
std::dequeue and blender::Set. That makes ensuring the
invariants more obvious, and the choice of data structures means
there are no allocations per notification like for ListBase.

