Fix issue 34 (SFTPFile prefetch assumes response order matches requests)

`SFTPFile._async_response` gets a new 'num' parameter giving the request
number.  This can be matched up with the return value of
`SFTPClient._async_request` to retrieve data specific to that request.

The prefetch queue `SFTPFile._prefetch_reads` is replaced with the dict
`_prefetch_extents`, which maps request numbers to `(offset, length)`
tuples.

A lock is used to exclude the case where a response arrives in
`_async_response` before `_prefetch_thread` has updated it.

[Maintainer note: See #34 for initial bug report.]