improve zerovm return code handling

zerovm can produce non-zero return codes when something abnormal happens not only in zerovm, but in untrusted code also
developer needs context of the problem, for that reason we try to save all output we've got to the places specified in job description file and do not discard it
we also set HTTP status 500 on the response where at least one node failed with bad return code
did some refactoring of the functions in the vicinity of error code handling to better isolate the issue