In general, this commit allows the I2C slave to recognize when writes
are occuring in serial - and seperate them out into independant
commands. In order to achieve this it:
* Corrects some setup parameters for the I2C state machine.
- Enables clock stretching
- Enables recommendations from the datasheet
* Participates in clock stretching. This is done by leaving the
`R_RD_REQ` register of `IC_INTR_STAT` set until the
slave has responded with some bytes (in `respond_to_write`).
* Recognizes `FIRST_DATA_BYTE` of `IC_DATA_CMD`, which indicates to a
slave-receiver than the current byte is part of a new transaction.
* Uses a state machine heavily inspired by the one in rp-rs as an
implementation detail. This is no more correct than the existing
approach, but makes the code significantly easier to reason about.
* Two additional errors were added, both indicating that the provided
buffer is too small for the message from the master-sender. As a
convenience, they have the same assosciated data so that matching
can be performed in the event that the call site handles messages
in a consistent way.