Change callback to use T instead of T * for memfunc type deduction; this
allows us to use a smart pointer (and probably saves us for cv cases
too?!)

Strangely, I'm not sure it's actually safe to use in all cases for any
smart ptr (like unique_ptr) - more study and testing required;

Also added callback-test executable to try to test these basic functions