chaingen: Only revoke missed tickets once.
chaingen: Only revoke missed tickets once.

This modifies the test chain generator infrastructure that automatically
tracks missed votes and generates revocations for them to only generate
a single revocation and properly handle reorgs by removing revoked
tickets from the pool of missed tickets when a block is connected and
adding back any revoked tickets to the pool of missed tickets when a
block that contains them is disconnected.

In addition, it modifies the handling of stake ticket purchases such
that the associated ticket purchases are created after the munge
functions run to ensure all changes are accurately account for.  In
particular, the indexes of the ticket purchase transactions within the
block can change if the munger adds or removes transactions before them.

This allows the large reorg tests to work as intended again.

jrick/dcrd,jrick/dcrd,decred/dcrd,decred/dcrd