code: function ImmutableCoreModelQuery (args) {
      // require model
      this.assert(defined(args.model) && args.model.ImmutableCoreModel, 'model required')
      // set model for query
      this.model = args.model
      // args and session are both optional in some cases
      this.args = _.cloneDeep( requireValidOptionalObject(args.args) )
      this.session = requireValidOptionalObject(args.session)
      // validate and normalize args
      this.initArgs()
      // valid view args and instantiate model view engine if there are views
      this.initViews()
  }
docs: @function ImmutableCoreModelQuery
  
  instantiate a new ImmutableCoreModelQuery instance
  
  @param {object} args
  @param {ImmutableCoreModel} model
  @param {object} session
  
  @returns {ImmutableCoreModelQuery}