dwc_otg: Rewrite driver to include FIQ_FSM

This extensive rewrite changes the operational capabilities of the FIQ
to perform the entirety of a split transaction in FIQ context.

The advantages are numerous:
- Total CPU interrupt processing time is reduced by ~90%
- Interrupt latency no longer affects split transactions, except
  in extreme cases
- NAK holdoff is now adjustable

All driver options relating to the FIQ have been changed.
- dwc_otg.fiq_enable
- dwc_otg.fiq_fsm_enable
- dwc_otg.fiq_fsm_mask
- dwc_otg.nak_holdoff

See the code for how to set the module options.

Known bugs:
- Isochronous OUT transfers are subject to occasional data corruption.
- Unplugging the root port or booting with the root port disconnected
  will result in the interrupt handling breaking and USB becoming
  unresponsive
- Setting dwc_otg.fiq_enable=0 causes interrupt handling to break.
fiq_fsm: fix typo in the NOP handler for SOF holdoff
fiq_fsm: Accelerate High-speed Isochronous transactions

An entire URB's worth of Isochronous transcations to an endpoint
are now handled in the FIQ. To activate, set bit 2 of fiq_fsm_mask.

Also, make the FIQ aware of dequeue events and react accordingly.