Make reading conform to protocol states #17

 * Rework reading to handle arbitrary responses
 * Rework reading to deal with serial stream
 * Add another constructor to Message (avoid extra list conversions
   otherwise required by the above changes #4
 * Add method for unpacking message size again
Update following changes to read() Ref #10