Refactor i2c support and Erlang command processing

This makes the gpio and i2c code both use the same Erlang command
processing routines. The I2C support has been modified to be process per
I2C endpoint since it is not common to want to mix code for two I2C
devices and this makes it harder to do that. It also makes the common
case of using one endpoint easier since you don't have to specify the
address all the time. Additionally, the code uses binaries instead of
lists and refers to buses by their integer number rather than a /dev
file reference.