
The Barry library has the following exception hierarchy:

- std::exception
	- std::runtime_error
		- Barry::Error
			- Usb::Error
				- Usb::Timeout
			- Barry::BadPassword

Usb::Error
	All specific USB error exceptions will be derived from
	this class.  Where possible, this class also stores the
	specific return code from the libusb API, to allow
	fine grained error handling.

Barry::Error
	All specific Barry error exceptions will be derived from
	this class.  This can be thrown from anywhere inside Barry.


There is also the remote possibility that there will be memory exceptions
from a call to 'new'.  In that case, std::bad_alloc will be thrown
by the standard C++ libraries.  Barry does not catch these errors.

All of the above exceptions are derived from std::exception, so they
can all be caught in one statement for the efficient and lazy. :-)

