easier to understand this way
make sure we don't deadlock when there's an error in callback
introduce RC::Promise.backtrace for getting the call stack

before entering the callback. this would be useful to track
the exceptions happen in the callback, because using `caller'
in the callback can only see the call stack within the callback
thread, not where the job was defined.