A limitation of the current API was that the destroy notifier was called
on the mime-data block. This prevents the user from passing in a pointer
to a managed block, for example a mime-data block belonging to a
ref-counted object. We can overcome this by allowing the user to specify
the closure to be used with the destroy notifier.
<adrianj> ickle_: If we are going to use a different image for jpeg in
mime-data maybe we could create a jpg that contains the text "jpeg". That
way when support for the other image formats is added the mime-data test
could have one image for each type with each image and it is easy to see
that each image is the correct one.
Use the surface user-data array allow to store an arbitrary set of
alternate image representations keyed by an interned string (which
ensures that it has a unique key in the user-visible namespace).
Update the API to mirror that of cairo_surface_set_user_data() [i.e.
return a status indicator] and switch internal users of the mime-data to
the public functions.