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