Generalize synthetic messages [#3169]
Closes #3169 (closed). Generalizes beyond synthetic transactions to synthetic messages. Transforms the synthetic transaction message type into a SyntheticMessage wrapper that can carry various types of Messages. Updates the message executor system to better support nested messages.
Changelog: refactor