libbladeRF: Added samples <-> bytes conversion routines

These will become the preferred method of performing such
conversions in upcoming commits, where additional formats
will be added.
libbladeRF: Added simple test to check for RX discontinuities

This program enables the FPGA's internal 32-bit counter mode and
looks for any gaps in the received data, which would be indicative
of the host or USB i/f failing to keep up with the sample rate.
libbladeRF: Added support for Cypress Windows Driver & API backend

A USB backend based atop of the Cypress CyAPI (which is based atop the
Cypress CyUSB3 driver) has been introduced. This is intended to provide
Windows users with an additional driver to use if they encounter issues
with their USB host controller and libusb.

To build and use this backend, the Cypress FX3 SDK must be installed and
the following CMake flags should be provided:
    -DENABLE_BACKEND_CYAPI=Yes -DFX3_SDK_PATH=<path to SDK>

A modified cyusb3.inf is provided in host/drivers/windows/cyusb3. Upon
performing a build this inf file and the associated driver files from
the FX3 SDK will be copied into the "output" directory along with the
bladeRF.dll and bladeRF-cli.exe. To install the driver, point the
Windows driver update to this location and accept the warning about the
driver being unsigned; this occurs because the Cypress driver wasn't
signed with bladeRF VID/PID values.

The libbladeRF device string for this backend is: "cypress"

Many thanks go out to LazyDodo for all his efforts in spearheading the
development of this backend -- much of this code is either his doing or
is directly based upon his efforts.
bladeRF-cli: Updated backend names reported by info/probe
libbladeRF: Don't fail out of probe/open if device can't be opened

libusb appears to return a "not supported" error if a device is currently
associated with a different driver, such as CyUSB3.

We'll want to continue looking for libusb devices rather than bail out
if we encounter this error, as we may have hit a device belonging to
our CyUSB backend
libbladeRF: Updated default backend selections, remove unused items

The libusb and Cypress backends are now defaulted to ON if they are
detected on the system, and OFF otherwise.

The deprecated Linux kernel driver option has been removed. It will
be re-added if and when this code is updated/rewritten.

The "detach kernel module" libusb option has been removed, as it was
unused anyway.
libbladeRF: Minor touch-ups in libusb backend

Removed switch() on sample format and replaced it with a call to the
new async_stream_buf_bytes(). This will become more relevant in upcoming
changesets when new formats are added.

Other changes are just aesthetic house-cleaning items. Shortening some
lines and long variable names.
cmake: Set FX3 SDK path variable's default value from environment variable

The FX3 SDK installer creates the FX3_INSTALL_PATH variable, so there's
no need to hardcode a default path.
libbladeRF: Updated README.md

Added new backend option, removed documentation for items removed
in commit ee618d3e1.
host: Updated README.md

Updated backend flags and removed items from ee618d3e1.

Added additional Windows build information and the availability
of the Cypress backend.
cmake: Fixed 'make uninstall' issue (#314)

This addresses an error where 'make uninstall' would fail with:

    CMake Error at cmake_uninstall.cmake:4 (message):
        Cannot find install manifest:
        "<path>/build/host/install_manifest.txt".

The problem was that using CMAKE_CURRENT_BINARY_DIR in
cmake_uninstall.cmake wasn't really appropriate in our particular case,
as the "current" directory would be host/ once CMake dove into that
subdirectory.  This has been changed to CMAKE_BINARY_DIR to ensure
we're reference the top-level of the build.
libbladeRF: Check for BLADERF_FORCE_NO_FPGA_PRESENT environment variable

Setting this environment variable forces libbladeRF to always report
that no FPGA is loaded, rather than query the device.

This is intended for debugging and to provide a workaround for
issue #327, where users with a pre-v0.0.1 FPGA being autoloaded from SPI
flash are unable to open a device handle because the FPGA does not
supply a version number (which is now required by libbladeRF).
bladeRF-cli: Made output formatting more consistent

The preferred output format for commands is a leading newline, content
indented two spaces, and a trailing newline. Sub-levels should be
indented an additional two spaces.

Example:

bladeRF> my_cmd arg1 arg2

  Info1: Something about arg1
  Info2: Something about arg2
    Subinfo 1: abc
    Subinfo 2: xyz

bladeRF> my_cmd badarg arg2

  Error: Message about badarg

bladeRF>
bladeRF-cli: Matched mimo cmd usage to help text, status code cleanup

The help text reports the usage of the mimo command to be:
    mimo [master | slave]

Since there was no alternative to argv[1] being anything other than "clk"
this was dropped so the invocation matches the help text.

If an error occurred, this command was returning a libbladeRF status
code directly, instead of returning a CLI_RET code. This has been fixed.
bladeRF-cli: Added brief summary of how to add new commands
bladeRF-cli: Remove duplicate message from probe when no device is found
libbladeRF: Workaround for deadlock condition

This is a workaround for issue (#324).

We appear to have a lock ordering issue with our stream->lock and the underlying
libusb event lock.  When a libusb event occurs, it acquires its event lock and
then our callback acquires a stream lock.  When we asynchronously submit a
transfer, we acquire the stream lock and then libusb acquires its event lock
under the hood. If a callback occurs while we're submitting a transfer on the
same stream, deadlock ensues, due to the above asymmetry in lock acquisition.

Ultimately, we'll need to review our locking scheme and libusb event handle to
address underlying design issues here, and potentially trim some fat.

For now, the lock is just dropped after all metadata has already been updated,
and reacquired after submission.
bladeRF-cli: Launch RX/TX tasks only when handling input

There's no point in starting these threads up if we're performing
operations from command line flags that will cause the program to
exit, rather than enter the main input loop, which may execute
the rx or tx commands.
host: Added a config-time libusb version check and errors/warnings

FindLibUSB.cmake now fetches the libusb version via libusb_get_version()
so that we can warn (or error out) about the system containing an
outdated libusb version.

The following policies have been based upon support experiences and the
libusb changelog:

    Windows: Error out for libusb < 1.0.19
        v1.0.19 provides Windows 8 SuperSpeed detection support,
        and appears to address a number of issues bladeRF users
        have reported with v1.0.18 and earlier.

        We force users to update here, given that some of the failures
        on earlier versions were yielding corrupted samples.

    OSX: Warn for libusb < 1.0.18:
        v1.0.16 - v1.0.18 introduced SuperSpeed and 64-bit support,
        as well as fixes for compile-time and run-time issues.

    Linux: Warn for libusb < 1.0.16:
        This is largely based upon feedback from bladeRF users. While
        older versions may work, a number of users reported that issues
        appeared to be resolved after updating libusb to >= 1.0.16.
        (It isn't always clear if the reported update included Linux
         distro upgrades that included kernel updates.)

The version check may be skipped via LIBUSB_SKIP_VERSION_CHECK=Yes.
This is intentionally not noted in the warnings/errors, as it's
preferred that users update libusb rather than just skip the check.
bladeRF-cli: return CLI_RET_* codes from calibrate_dc()

The caller in calibrate.c expects CLI return codes, not libbladeRF
return codes.