stm32/i2c: Large redundancy update

This commit adds a significant amount of redundancy to the stm32 I2C
driver.  It can recover from every error I have encountered.

The first step to improved redundancy were several slight changes in
i2c_read and i2c_write to exactly following the sequence specified in
the reference manual.  A few steps were slightly out of order, or
require different placement based on single- or multi- byte transfers.

Secondly, i2c_read and i2c_write will check for bus errors, and the BUSY
condition before beginning.  In the event of a bus error, the peripheral
is left in an unknown active state, which requires a peripheral reset.

If the bus is BUSY, things get more complicated.  A previous transaction
may not be entirely finished, so the driver will wait.  If waiting
proves fruitless, a peripheral reset may force the peripheral to free
the bus.  Finally, an I2C slave may be holding SDA low, waiting for
communication.  In order to get the slave to release the line, the slave
must be manually clocked, emulating communication, until the line in
released.  If the final step fails (I've yet to see this happen),
something else is going on and there is no recovery.