introduce simple CallbackHandle

A CallbackHandle is used to cancel a previosuly submitted future with
set callback without keeping the future object around.

A CallbackHandle remembers the callback pointer and the IoContext
where the callback was submitted to submit a cancel operation for the
pointer on the same IoContext.

A CallbackHandle can be obtained by calling
50 jobs for cancel-callbacks-simple in 16 minutes and 31 seconds (queued for 5 seconds)