Make sure the program exists and is executable before we inject kioexec/kdesu/etc.
This consolidates all the logic for finding the executable at the beginning of DesktopExecParser, rather than half in DesktopExecParser (too late, after injecting kioexec into the command) and half in KProcessRunner (which means other DesktopExecParser users didn't benefit from it, and we had to guess what happened in DesktopExecParser)
This fixes applicationlauncherjobtest's regression after commit 6452a34c.