hotplug: Give the usbi_hotplug_match* functions a context parameter

So that the device parameter can be NULL, in combination with a 0
events parameter, to be used to force lazy deregistration.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
hotplug: Wakeup libusb_handle_events on libusb_hotplug_deregister_callback

This serves 2 purposes:

1) We use lazy free-ing of the callback structure, for it to be actually
free-ed usbi_hotplug_match() needs to be called. This ensures this actually
happens (rather then waiting for a hotplug event to arrive, and not freeing
the callback as long as no such event arrives).

2) It causes libusb_handle_events to return to its caller on a call to
libusb_hotplug_deregister_callback, which is very useful for apps which use
a thread to do their apps (hotplug) event handling, otherwise that thread will
hang when the app tries to stop until some event happens.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Documentation: explain the 2 main viable event handling approaches

Stop pretending that having a separate event handling thread is a bad thing,
specifically delete the "[this] option is not very nice either, but may be
the nicest option available to you if the "proper" approach can not be applied
to your application", which suggests that using poll integration into a main
loop is the one and only "proper" approach.

Instead clearly document there are 2 viable approaches, using a separate
thread, or poll integration into a main loop.

Also stop claiming that libusb does not use threads internally, as with
the new hotplug support this is no longer true.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Documentation: add an Using an event handling thread section

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Prepare for 1.0.16-rc3 release

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Prepare for 1.0.16 final release

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
hotplug: Pass explicit context to callbacks

* Instead of passing NULL for the context to hotplug callbacks, if the
  context happens to be the default context, always pass the explicit
  context pointer.