InvokeCommand should call ExecuteAsync whenever possible.

`InvokeCommand` still calls `Execute` while we have the new awesome `ExecuteAsync` method. This PR makes `InvokeCommand` call `ExecuteAsync`, so we properly cleanup the `ExecuteAsync` subscription if we dispose `InvokeCommand`.