Renamed 'handle' to 'device'

It's just a device descriptor so we should name it accordingly
Added support for external backend registration

This commit reworks the backend framework to add support for
registration of custom external communication backends by using the
newly introducted sa_register_backend() function.

This is a rather large commit which also includes:

 * Various cleanups and restructuring
 * Added list implementation (MIT licensed)
 * Moved header files to separate include directory
 * Updated README
 * License year updates
 * USB adapted to use the new backend framework
 * Added sa_list_backends() which returns string list of currently
   registered backends