This might enable passing functions that can take arbitrary numbers and types of arguments, without the need for proliferating polymorphic invocation methods in OperationManager.
Is there an issue for this? I wonder if this is something that can be solved by passing a lambda, rather than a std::function.
Originally posted by @stiber in #880