Use interrupt based USART

Instead of blocking and polling in the USART code, use an interrupt based
approach. Implement a simple ring buffer to buffer unsent data.
Use UDRE interrupt instead of TX interrupt

This change makes use of the USART internal UDR buffer. As the UDRE interrupt is
level based it has to be disabled when not used.