Fix broken handling of proposal queue for already queued proposals

The assumption that a proposal that was already queued should stay
queued is fundamentally broken: the proposal might have been updated,
leading to a situation where it doesn't need to be queued anymore.

Instead of assuming wrong, we always check if a proposal should go in
the queue. If the item was not already queued, we keep the same
behavior. If it was already queued, then:

  - if it doesn't need to go in the queue, we remove it from the queue
  - if it does need to go in the queue, we update the item in the queue
    with up-to-date status.

This fixes an issue where everything can be blocked forever because a
proposal is stuck as queued forever.