dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock held in completion handler

usb_hcd_unlink_urb_from_ep must be called with the lock held.  Not doing so
resulted in corruption of the list, and doing it asynchronously in the
tasklet (see c4564d4a1a0a9b10d4419e48239f5d99e88d2667) made the problem more
likely to occur.

Also ensure the urb is OK to be unlinked before doing so, and unlink it from
the endpoint prior to queueing it for handling in the tasklet.

NULL pointer deref kernel oopses had been occurring in usb_hcd_giveback_urb
when a USB device was unplugged/replugged during data transfer.  This effect
was reproduced using automated USB port power control, hundreds of replug
events were performed during active transfers to confirm that the problem was
eliminated.