worker: support more return types in posix worker
This allows us to return things that aren't tuple(int, str) from worker
functions. I wanted to use marshal instead of pickle, but it seems to read from
the pipe in non-blocking mode, which means it stops before it sees the results.
The windows worker already supports arbitrary return values without
serialization, because it uses threads instead of subprocesses.
Differential Revision: https://phab.mercurial-scm.org/D3845
#require docutils gettext
$ $TESTDIR/check-gendoc ru
checking for parse errors