Let invokeWithArgsList() handle and return the return value of
non-void callables wrapped in a QVariant. To avoid special-casing,
the invocation of a void callable also returns a (default-constructed,
thus invalid) QVariant.
To indicate failure, wrap the QVariant in a boost::optional that is
empty if the callable could not be invoked.