function proxy(source, properties, dest) {
  if (!this.isArray(properties)) {
    properties = [properties]
  }

  properties.forEach(function forEachProxyProp(prop) {
    Object.defineProperty(dest, prop, {
      get: function proxyGet() {
        return source[prop]
      },
      set: function proxySet(val) {
        source[prop] = val
        return source[prop]
      }
    })
  })
}
Proxies all set/get actions for each given property on `dest` onto `source`.

@memberof Shim.prototype
@param {*} source
 The object on which all the set/get actions will actually occur.
@param {string|Array.<string>} properties
 All of the properties to proxy.
@param {*} dest
 The object which is proxying the source's properties.