gmain: serialized poll modifications for the backends

Only calling add_fd/remove_fd/modify_fd from the iterating thread
allows to remove all locking in the backends, and reduces complexity
all around. The only reason to do otherwise was that epoll_ctl
can be called concurrently and makes an explicit wakeup unnecessary.
But since even the epoll backend had to grow compatibility support
infrastructure and the associated synchronization, that small benefit
was negated.
gmain: No need for a hash table to manage the poll update set

The update list can be woven into the GPollBin structures
and maintained with O(1) operations rather than frequent
memory allocations in short-lived hash table sets.
gmain: Avoid unnecessary wakeups

Redundant wakeup writes may degrade performance, and they certainly
generate useless chatter in strace logs.