ugtrain: never use a shell to run the game

We are lazy and let a shell convert our command string into a
command vector for execv() when a preload command or game options
are given. But double code is bad. So always put a command string
together, split it into a string vector and convert that one into
a C string vector. Sounds cumbersome but should be the most
flexible way. This should also improve security and performance.
ugtrain: handle exec errors and rework wait handling

If exec fails, then we should handle that accordingly by exiting.
Also the wait handling is not correct. We can't wait for an already
running game process. So maintain a call pid which is set after
exec and use that one for wait(). If it is < 0 and the game pid
is found, use the other wait method.