Decrease timeout for zynq I2C controller from 50 to 5 seconds
Fix bug where i2c transactions on different muxed bus segments were not locked correctly
Add retries to I2C transaction and handle failures better

Before, an error in reading would lead to erroneous values being written
back to the device (potentially turning on or off LEDs undesirably).