Uart servers and refactoring of IO
- Creates a generic Notifier class. Arguments: Event ID, notification message type, whether starts as enabled.
- Creates a DelayCourier class. No arguments. Will query parent task for delays, delay for that length and then query for next delay.
- Creates tasks to Read/Write to uart servers. Sets up the uart servers as required once interrupts are working. For now, uses debug busy wait I/O for testing.
- Refactors all reads/writes to use the UART servers instead of busy wait I/O. Only include the debug busy wait code when DEBUG = 1. This required refactoring quite a bit of code to use assertions only when in debug mode. We should aim to develop in debug mode a lot of the time initially so we will see these warnings.