One other difference between OrchestrateFutureImpl and AbstractOperation's handling of listeners is around thread safety.  OFI takes care to lock anytime it works with the listeners.  I think it is likely fine to not do that with operation (since the operation would likely be built one one thread), but we may want to document it.