Two problem here:

* We should not free the message if `decode(...)` returns `imsg` (i.e. `imsg` == `omsg`)
* Freeing a message automatically should be configurable (e.g. a user might not want to reuse its data.)