code: function ImmutableCoreModelSelect (args) {
      // create select object to store state of select
      var select = {}
      // model query will be performed on
      select.model = args.model
      // current context of query
      select.context
      // data associated with context
      select.contextData = {}
      // true if next property access should be column name
      select.expectColumn = false
      // all properties
      select.history = []
      // query to be performed
      select.query = {
          session: args.session,
      }
      // create proxy to map property accesses to query builder commands
      select.proxy = new Proxy({}, {
          // proxy handler with get function that passes select object
          // along with the requested property to the actual handler
          get: function (target, property) {
              return getProxy(select, property)
          }
      })
      // return proxy
      return select.proxy
  }
docs: @function ImmutableCoreModelSelect
  
  @param {object} args
  
  @returns {ImmutableCoreModelSelect}