Added ability to measure clock offset from cluster

RPC servers and clients now both update a shared map of measured remote offsets.
Servers get this measurement from their attached clients. Servers
are given this ability because they don't always have their own client to the
remote node if that remote node has a client to them.

The server now passes a Context object to the rpc frameworks rather
than passing all 3 required fields individually.

Though the algorithm for measuring cluster offset is now implemented, the server does not yet actively measure cluster offset nor does it do anything with any offset measuring.
Note that I am treating MaxDrift as MaxOffset.

Drift implies the speed with which the clock scew is changing. In other words, if the clock C(t) is changing with skew C'(t), then the drift is C''(t). 

Alternately, the clock of A is C<sub>a</sub> the clock of B is C<sub>b</sub>, then the _offset_ between them is |C<sub>a</sub>(t) - C_<sub>b</sub>(t)|.

I believe that MaxDrift is actually intended to be used as MaxOffset, because of it's usage in timestamp_cache:
```
tc.lowWater.WallTime += clock.MaxDrift().Nanoseconds()
```

If I'm right, I recommend that we rename it. Otherwise I'll need to stop using Drift where I'm supposed to be using Offset :)