Make a RETIOERR() marcro to handle IO errors.

This lets Perl_io_error() capture the IO function's arguments and its
return value.  Normally this cannot be done because both live on the
same stack.

It does assume that all IO functions return a single scalar, which I
think is true and we'll just go with it until its not.

It also means IO functions will have to store their return value
rather than intermittantly push it onto the stack, to preserve its
arguments.  I don't think this will be a big problem.  We'll find out.

For #11
Getting the NUMARGS macro right, for reals this time.

Can't use SP - MARK because dMARK modifies PL_markstack_ptr which
creates memory panics for `ok eval { truncate(...) }` so use
*PL_markstack_ptr directly instead.

Put all the users of NUMARGS back the way they were.