SMBus smart battery driver

This adds support for reading the voltage of a "smart battery" using I2C which is mostly compatible with SMBus.
I don't think we need to implement proper SMBus transfers which are variable-length for this. You can just do a plain I2C read for 4 payload bytes + the known fixed overhead.
The block transfer logic doesn't look right to me, which is why I suggested to not use that function and do the transfer() call directly with the expected payload + overhead length and bytes.