Add RunAsUser implementation.
* src/desktopshellrun.cpp: New.
As it is impossible to fully drop privileges from an elevated
token in UAC the approach is to look up the users shell and
send a COM signal to spawn a process with the shell's access rights.