USB queue support and CPLD update rework

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 `hackrf_usb.c`. These are,

  * the firmware is notified of `SET_CONFIGURATION` events by providing an `extern` symbol declared in `usb.h`. As a comment in the code admits, this is a bit of a backwards interface. Instead, we now offer an [interface](https://github.com/bgamari/hackrf/blob/usb/firmware/hackrf_usb/usb_standard_request.h#L49) with which the user can 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 tracks 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 asynchronous completion noticiation. Here the queue management layer consists of a fixed pool of TDs and logic to allocate transfers and track their completion.

I tried to keep the USB transfer queue layer as modular as possible but the effects are fairly widespread due to the nature of the change. This also makes the resulting interface a bit awkward: the primary function for scheduling transfers is now `usb_queue_schedule_transfer`, defined in `usb_queue.h`, not `usb_endpoint_schedule_wait`, defined in `usb.h`. It might make sense to move the latter and others to a file devoted to these sorts of low-level utilities to avoid confusion.

In addition to the USB queue rework, I have also refactored the CPLD update interface to allow streaming of XSVF data from the host, allowing us to eliminate a 64kB static buffer. This refactoring introduces a new USB configuration exposing a USB OUT endpoint on which the device accepts XSVF data. The appropriate changes have been made to libhackrf and host tools.

Both CPLD update and rx work in my test environment. I do not have the ability to test tx but believe it should work as it exercises the same code paths as rx.