Add part of sequence number logic #9
Merge branch 'master' into iss10-send-receive
Changes related to sending and receiving

Most changes related to #10
 * Implement sending
 * Implement receiving
 * Add method to check programmer version on the Arduino
 * Handle sequence numbers #9
Sending and receiving #10

 * Make read() throw IllegalStateException
 * Make getProgrammerVersion() retry when encountering communication issues
 * Make getProgrammerVersion() fail hard on incorrect sequencenumber
 * Make getProgrammerVersion() fail hard on incorrect command response
Add reminder to read after sending #10
Receiving

 * Change to expect same sequence number in return #9
 * Add check for response checksum #10
Get updated Message code
Receiving #10

 * Update method names to match changes in Message
 * Add extra return statement in read()
 * Add reminder to check read() logic
Merge branch 'issue4-message-abstraction' into iss10-send-receive
Message size #4

 * Rename getMessageSize to packMessageSize
 * Make packMessageSize private
 * Remove parameter from packMessageSize
 * Add messageSize as field
 * Simplify packMessageSize
Add return of version in getProgrammerVersion() #10
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