Major overhaul using an error checking macro
Fixed faulty macro
Adds a varargs based write function
Refactored I2C::read() functions