Allow `std::reference_wrapper` to dispatcher `Invoke`
Right now only copyable objects can be passed to Invoke. Currently, it is possible to pass an object pointer and have it treated like the object, to work-around this. We should extend this functionality to also accept std::reference_wrapper
as it acts as a better self documentation of its usage.