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.

For cross range calls, you're going to want to set the timestamp manually to the node's current timestamp in the distributed sender if it's not already set. Otherwise, passing a zero timestamp gives you the current time at each node when it arrives, so you'll end up with different timestamps for your individual scans. I should not that this happens automatically with transactions, which you're eventually going to guarantee are wrapping these calls, so that should work fine.

Now, as to why this scan isn't seeing the writes, that's definitely not correct. Need to debug that.