desktop_util: Use a fork/execlp/waitpid workflow instead of system()

system() is inherently unsafe due to the whole "pass arbitrary strings
to the system shell in unescaped form" business, plus it would force us
to use parameter quoting for game paths containing whitespace (e.g. on
OS X). The extra code required for using fork/exec/wait directly doesn't
seem all that bad in hindsight (plus, it prevents us from doing
something potentially stupid if the user's preferences dir is named
something like ".wesnoth-1.11;rm -rf $HOME".

This method should work equally well on Linux and OS X and other
Unixes.