code: function boxState(getState, saveState, options) {
      let boxed = new BoxedState(getState, saveState, options);
      boxed.proxiedThis = new Proxy(boxed, BoxedStateHandler);
      return boxed.proxiedThis;
  }
docs: Create a boxed on demand property with save and cancel functions
  ._$ - returns boxed state, will always return the same state until saved or cancelled
  .$_commit$() - saves modifications and clears boxed so next demand will create a new boxed
  .$_cancel$() - cancels mods, clears boxed so next demand will create a new boxed
  
  @param getState   callback returning state to box
  @param saveState  callback taking (modified, boxed, onDoneCallback) of the state on .save(onDoneCallback)
  @param options function for creating box or object containing {box: boxFunction}
  if not defined then global boxed-immutable.box will be used.
  @return proxy which reflects fresh immutable state with commit/cancel on mods.