[WIP] USB queue support

The HackRF USB stack is a well-written, nearly independent module which would make for an excellent free-standing library (or perhaps even merged in to `libopencm3` after a bit of refactoring.). This patchset is an attempt to break the few tights ties that remain between the USB stack and the `hackrf_usb` firmware. Namely,

  * the firmware is notified of `SET_CONFIGURATION` events by providing an `extern symbol defined in `usb.h`. As the comment here says, this is a bit of a backwards interface. Instead, we now offer a [way](https://github.com/bgamari/hackrf/blob/usb/firmware/hackrf_usb/usb_standard_request.h#L49) to specify a completion callback.

  * queue management was a bit rudimentary and left a great deal to the firmware. This is largely due to HackRF's straightforward USB requirements (currently handing buffers of IQ samples to the host, waiting for the completion of each).

It is possible to achieve far more at relatively little cost if one inserts a layer tracking the state of the transfer FIFO, as is suggested in the TRM. This allows one to use the transfer chaining ability of the LPC43xx's USB controller and enables tracking of transfer completion. Here the queue management layer consists of a fixed pool of TDs and logic to allocate transfers and track their completion.

While a fair amount of cleaning up remains before the code can be considered merge-worthy, things currently work as expected.