SPI: Add non-blocking coroutines to SimpleSpiMaster interface.
SPI: Add coroutine implementations for AVR.
AVR: Make index static within function.
STM32: Add SPI coroutine implementation.
AVR: Add UartSpi coroutine implementation.
STM32: Add UartSpi coroutine implementation.
SPI: Move coroutine header to interface header file.
SPI: Add software busy-waiting "coroutine" implementations.
SPI: Remove all _impl.hpp files and move the code into .cpp files.
This is required at least for the `state` static member variable.
SPI: Reorder methods for clarity.
SPI: Implement blocking calls using CO_CALL_BLOCKING macro.
SPI: Rename `writeRead()` to `transfer()` in all implementations.
SPI: Rename all `writeReadBlocking()` to `transferBlocking()`.
SPI: Remove SpiMaster interface.
Using Transaction Objects is not suitable for SPI.
SPI: Rename all `SimpleSpiMaster` to `SpiMaster`.
There can only be one true master.
SPI: Rename all files which include `simple_spi` to `spi_master`.
SPI: Move SpiMaster interface into its own file.
SPI: Add aquire() and release() methods to SpiMaster interface.
Add SpiDevice class for managing the configuration callback for first aquire.
SPI: Add `aquire()` and `release()` implementations.
SPI: Save 1 byte per SPI instance on AVR by using the 6 unused bits in state
for aquire counting.
ALL: Optimize switch case with default label.