I haven't realized this before, but we're going to confuse things a bit if we call this the "asyncRemoteCommandsExecutor", because we already have async commands, which mean a completely different thing. In fact, a command sent asynchronously most likely won't be passed to this executor.

Maybe we should just call it `remoteCommandsExecutor`?