Hotplug

You can use it like this:

```go
func Hotplugged(desc *usb.Descriptor, event usb.HotplugEvent) bool {
	return false
}

handle, err := ctx.RegisterHotplugCallback(usb.HOTPLUG_ANY, usb.HOTPLUG_ANY, usb.HOTPLUG_ANY,
	Hotplugged,
	usb.HOTPLUG_EVENT_DEVICE_ARRIVED | usb.HOTPLUG_EVENT_DEVICE_LEFT,
	true,
)
```

Returning true in the callback will deregister it.

I also added a HandleEvents method to Context, because if your main loop is an infinite loop, the scheduler will never schedule to goroutine inside usb.go. Alternatively, you can use runtime.Gosched to give it a chance to run.
Also, please use vendorID and productID; write out the function type instead of making HotplugCallback, and make it variadic: events ...HotplugEvent.

I would make two functions instead of making the `enumerate` bool:
    RegisterHotplug(...)
    EnumerateAndRegisterHotplug(...)

This makes it easier for people reading the code to understand what's going on, instead of forcing them to know what that tricky boolean does.  It seems unlikely that it will be called with anything but a constant in 99% of cases, so this works out well.