UART serialization fix

These changes serialize operations on the serial driver. This keeps multiple threads from calling the UART init/config functions while the serial task is doing reads and writes.

Earlier, this change was reverted because it caused some issues with the LPC debug interface. We believe this change actually just revealed an existing bug in the USB stack. The recent changes to the USB stack to fix threading issues should have fixed that.