message: [vm-runtime] make InterpreterContext::borrow_global return a shared reference
  The &mut is unnecessary, and this unblocks further cleanup of the ChainState API.
  Closes:
  Approved by: runtian-zhou
diff: @@ -36,7 +36,7 @@ pub trait InterpreterContext {
  def: StructDef,
  ) -> VMResult<(bool, AbstractMemorySize<GasCarrier>)>;
  - fn borrow_global(&mut self, ap: &AccessPath, def: StructDef) -> VMResult<&mut GlobalValue>;
  + fn borrow_global(&mut self, ap: &AccessPath, def: StructDef) -> VMResult<&GlobalValue>;
  fn push_event(&mut self, event: ContractEvent);
  @@ -110,7 +110,7 @@ impl<T: ChainState> InterpreterContext for T {
  })
  }
  - fn borrow_global(&mut self, ap: &AccessPath, def: StructDef) -> VMResult<&mut GlobalValue> {
  + fn borrow_global(&mut self, ap: &AccessPath, def: StructDef) -> VMResult<&GlobalValue> {
  match self.load_data(ap, def) {
  Ok(Some((_, g))) => Ok(g),
  Ok(None) => Err(
  