MOB-8740: Limit mutexes locked for LPLOAD_GENERIC_INTERFACE_DRIVER

The USB function LPLOAD_GENERIC_INTERFACE_DRIVER is used by ceusbkwrapper to
load alternative USB drivers for specific interfaces of a device, or for the
whole device. This can happen when an interface filter matches, or a client
requests this via UkwAttachKernelDriver().

When LPLOAD_GENERIC_INTERFACE_DRIVER is invoked and a suitable driver is found,
USBD will invoke that driver's USBDeviceAttach() function on the calling thread.
Depending on the driver, this invocation may block for a considerable duration.
When LPLOAD_GENERIC_INTERFACE_DRIVER is invoked for a matching interface filter,
UsbDeviceList holds its mutex for the duration of the call. This blocks other
client requests to ceusbkwrapper until LPLOAD_GENERIC_INTERFACE_DRIVER
completes.

OpenContext also holds its mutex when calling AttachKernelDriverForInterface()
on UsbDevice. However, this only impacts the calling client, rather than all
clients of ceusbkwrapper, and so is less serious.

This patch modifies UsbDeviceList and UsbDevice to release the mutexes they are
holding for the duration of the LPLOAD_GENERIC_INTERFACE_DRIVER call, whilst
ensuring that the UsbDevice cannot be not closed or deleted during the call.
Additional logging has also been added to UsbDeviceList::AttachDevice(), to
inform on the outcome of attempts to attach kernel drivers to interfaces and/or
the whole device.