message: Hold shared lock (instead of mutex) when getting server context.
  The enqueue handler holds a shared lock to `contexts_mu_` to prevent concurrent context updates while executing an op. This change allows KeepAlive (and other requests that do not update contexts) to be handled in parallel with Enqueue requests.
diff: @@ -560,7 +560,7 @@ Status EagerServiceImpl::SendTensor(const SendTensorOp& send_tensor,
  tensorflow::Status EagerServiceImpl::GetServerContext(
  uint64 context_id, ServerContext** server_context) {
  - mutex_lock l(contexts_mu_);
  + tf_shared_lock l(contexts_mu_);
  auto iter = contexts_.find(context_id);
  if (iter == contexts_.end()) {
  *server_context = nullptr;
  