fix lack of return from negotiate_protocol_version
check all received rows against our rows and only replace those that are different.  this is pointless now when we get sent them one at a time, but will shortly be important.  it unfortunately defeats the consecutive-range clearing optimisation, so remove that.
DRY up using UniqueKeyClearer to clear by primary key too
WIP, trying out a minimum block size