I2C locking with any mor than 3 bytes sent

The receiver code is reading bytes even if there are none available.
If Wire.available() is non-zero it only means that there is at least one byte available - not that there are however many you need.
Try this (and note how it is been reformatted):

void receiveEvent(int howMany) {
  for(readit=0;readit<howMany;readit++) {
      // Wait for an available byte
      while(!Wire.available());
      // read it
      data[readit]= Wire.read();
      Serial.print("received ");
      Serial.print(readit+1,DEC);
      Serial.print(" value=");
      Serial.print(data[readit],DEC);
  }
}

Pete
P.S. this is a programming problem. Nothing to do with installation.