code: function api (obj, pointer, value) {
      // .set()
      if (arguments.length === 3) {
          return api.set(obj, pointer, value);
      }
      // .get()
      if (arguments.length === 2) {
          return api.get(obj, pointer);
      }
      // Return a partially applied function on `obj`.
      var wrapped = api.bind(api, obj);
  
      // Support for oo style
      for (var name in api) {
          if (api.hasOwnProperty(name)) {
              wrapped[name] = api[name].bind(wrapped, obj);
          }
      }
      return wrapped;
  }
docs: Convenience wrapper around the api.
  Calls `.get` when called with an `object` and a `pointer`.
  Calls `.set` when also called with `value`.
  If only supplied `object`, returns a partially applied function, mapped to the object.
  
  @param {Object} obj
  @param {String|Array} pointer
  @param value
  @returns {*}