Move callback system over to interface-based callbacks instead of raw function pointers