In Parsec, poll currently returns any consensused event once and only once. This comes from the original idea of requiring a supermajority for any consensus decision, which can't happen twice (we don't allow duplicate votes).
Since we now allow opaque payloads to be consensused with only one vote, we want to reach consensus on each voter's vote for the same payload. This means that a Vote for an Opaque payload by Alice must not be treated as a duplicate of a Vote for the same Opaque payload by Bob when we are using unique OpaquePayloads.
Instead of always returning an Option<Block>, poll should return an Option<ConsensusOutput> where ConsensusOutput is an enum that can represent
A block made valid
A vote for a payload reaching consensus for the first time
A subsequent vote for an already consensused payload
This is necessary to ease routing integration.
Note: It may make sense to tackle first.