use deferreds to handle errors in child PTs properly
factor some common code and let PTInterceptor support multiple callback chains