Catch errors thrown by cmdline::getoptions

A bit strange since the manual states that passing a usage value like we
did to cmdline::getoptions should handle this. Anyway, this resolves
the immediate problem and it sort of makes sense code-wise.
Uplevel fatal to caller scope

If wrapped calls manipulates things in caller scope, we need to mitigate
the fatal scope in order to keep the call chain the same.

I.e. if procedure foo does "fatal bar" an uplevel or upvar in bar should
end up in foo and not fatal.
Save executed return code in callers $?

Save the return code of the execute command in $?. This perhaps isn't
the cleanest of solutions, to manipulate variables in caller scope.
However, it's similar to what bash does and it sort of makes sense, so
long the usage of the return code is a corner-case and not common
practice this should suffice.