[MonoError] Add MonoErrorBoxed for mempool-stored errors.
The usual MonoError is suitable as a short-lived stack-allocated error
with a lifetime confined to a function call.
Internally it performs allocations using g_malloc/g_free.
The MonoErrorBoxed is a mempool-allocated error whose lifetime is tied
to the lifetime of a MonoImage.
We provide two operations:
1. MonoErrorBoxed* mono_error_box (MonoError *ierror, MonoImage *image);
Creates a new boxed error in the given mempool from MonoError.
It does not alter ierror, so you still have to clean it up with
mono_error_cleanup or mono_error_convert_to_exception or another such function.
2. gboolean mono_error_set_from_boxed (MonoError *oerror, MonoErrorBoxed *from_box);
Sets the error condition in the oerror from the contents of the given
boxed error. Does not alter the boxed error, so it can be used in a
future call to mono_error_set_from_boxed as needed. The oerror
should've been previously initialized with mono_error_init, as usual.