Add the ability to send a basic modbus packet

This still feels a bit ugly, I'll try to fix that up tomorrow.  Right
now, we have construction of a packet based on giving a function code
and the rest of the data (yup, no encapsulation there).  Reading the
response is then taken care of by a second function that will return an
error if it cannot get the full modbus response.

Logging is still not fully there, TODOs are left in the code for those
locations.