Make DispatcherBase invoke using a TryExecute
Rather than force all dispatchers to be templated on a device adapter, instead use a TryExecute internally within the invoke to select a device adapter.
Because this removes the need to declare a device when invoking a worklet, this commit also removes the need to declare a device in several other areas of the code.