**TODO: document this ** The implementation must respect the FGW_DYN type flag; in a multicall, the caller will make non-dynamic copies that shall never be free'd, even if the custom type sotres the payload as a separate allocation. In that case the non-dynamic copies will exist only as long as the dynamic parent copy exists (the caller gunaratees this) and they will all point to the same allocation. This also means a conversion to a different type shall not change the memory behind the allocation.