Deal with reading a buffer less than what was allocated.

With this fix, file_long_read now passes.
Ok, no problems, enjoy your vacation!

Although making read return an unsigned-int goes a bit against POSIX, in our case we (@pfalcon) is arguing that we want the entire range of numbers represented by the uint (except special -1).

Another way of doing it is to use the errno to indicate the error.  In our case we always return a local errno (not a global one), so why not use it instead of the size to signal an error?  Thus we have:
```
mp_uint_t (*read)(mp_obj_t obj, void *buf, mp_uint_t size, int *errcode);
```
And the semantics are: if errcode==0 then the read succeeded and the return value is the number of bytes read.  Otherwise, errcode!=0 and the return value is not valid.

I'd prefer this over having a special -1 return value, since it's neater, conceptually cleaner, and doesn't need a special #define.