Deal with reading a buffer less than what was allocated.

With this fix, file_long_read now passes.
Ok, fair point about memory access for errcode.  To go down the path I suggested, really the type declaration should be inverted to return the "status", and the size should be passed by a pointer as the last arg.

So, are you happy with mp_uint_t as a return type, with MP_STREAM_ERROR = -1?