Do we want to null-check here?  Also, the listeners for AbstractOperation is a List, but the listeners on OrchestrateFutureImpl is a HashSet.  Is this an intentional difference?  If we settle on using a Set, it might be useful to use a LinkedHashSet instead of just a HashSet so that the listeners would be called in the order they were added.