Introduce voters to the transaction manager
In preparation for implementing voting strategies, we need to let callers of transactions.RegisterTransaction
specify additional data for each participant that's taking part in a transaction. Such information may include e.g. a voting weight, so that the caller can set up specific weights for each of the nodes and thus influence how the voting should happen.
No functional change is expected from this MR, it's only some refactorings to make the heavy logic easier to implement.