Allow operations to cross range boundaries

 * add proto.Combinable interface

Combinable is implemented by responses whose requests may access multiple ranges,
such as {Scan,DeleteRange}Response and allows multiple responses to be merged
into a single one transparently.

* allow multi-range Scan and DeleteRange

adapted the distributed sender to split such requests up
and adress them to the individual ranges.
The Combinable interface is used to create a single response
from those parts which is returned with the client.Call.

By having ResponseHeader implement Combinable, you make every response implement Combinable because ResponseHeader is an embedded struct in each response. Is this your intention?

Seems like it would be better maybe to make Combinable take a proto.Response object instead of an empty interface. Then give ResponseHeader a Combine method which takes a *ResponseHeader specifically, and just call that from the Combine(c Response) methods for each response which actually should implement Combinable. This will give you the type safety you're looking for.