use event module and default update=True for DeviceList
Major rewrite

Change module name to spacemouse.
Significant changes to API. Devices now have a register attr which add
events with callbacks.
Modular backends with for now only support for linux.
Use only python, instead of calling c library of libspacemouse. This
adds dependencies on python-evdev and pyudev.
Moat all code has been revised and the examples are updated for the new
api.
Remove remaining artifacts of previous API
Major changes focused on provides runtime safety

Raise runtime errors when doing illegal operations on the device list.
Add ability to catch IOErrors and OSErrors, in loop.run() this is
implicitly done.
Monitor gained ability to also return on non-matching reads.
Fixed registry's ability to replace already registered callbacks.
Device's devnode connection gained some safety of closing the fd by
adding a __del__ method.
Simplify the examples by making better use of API

Remove explicit close calls, the close will happen implicitly.
Use register API directly instead of registering on each seperate
device.
Add simple add_device function

This means we do not have to create instances of Device to check if the
are duplicates.
Base list_devices() on match_device()
Use match_device() and create a _handle_read func

Move common read functionality to a single function.
PEP8 add 2 newlines
Remove stray mouse.register() from old API
Return self from __call__

This makes the API even more elegant.
Call start() on the returning obj of monitor()
Update and simplify use of API
Solve nasty exception in __del__

If the class object is removed before the instance is it loses the
abiltity to call it's method. The solution is to check if can find it's
methods before using them.
Add N_EVENTS constant
Try to properly silence __del__ exceptions
Add context manager functionality to class
Add cli submodule and support __main__ calling

The cli module is a reimplementation of the spm program from the
spacemouse project.
PEP8 conformity
Fix monitor module lifetime and add a stop method