Improve transaction event handling. E.g. refactor TransactionEvent to contain all necessary data to handle each event, see #1636 (comment). I think this should result in a lot cleaner implementation.
We don't want the split of data and instruction (=the variant) but have them passed alongside, avoiding implicit coupling and making it explicit.