[TASK] consolidate transaction logic

Major refactor of the way transactions are submitted
As @wltsmrz said, would strive for a more generic approach. I was thinking along the lines of letting the calling class decide wether or not duplicates should be blocked. A method parameter `blockDuplicates`, would solve that, but I would put it in an `options` object, so it's easier to expand on. The `hooks` object should be in there as well then.