read_async: rework USB buffer management to avoid libusb API violation

rtl_sdr on 64-bit Ubuntu 12.04 generates segfaults when interrupted
because the buffer used by a transfer initiated in rtlsdr_read_async()
was freed before the corresponding callback had been processed.

This commit reworks the async buffer management so that the callback is
responsible for freeing the buffer during the cancellation process and
ensures that the async call does not return until all buffers have been
released.

Ref: http://lists.osmocom.org/pipermail/osmocom-sdr/2013-January/000440.html
Signed-off-by: Peter A. Bigot <pab@pabigot.com>