code: function run(params, command, callback)
  {
    var terminator
      , requiresContext = isArrowFunction(command)
      ;
  
    // make sure callback is invoked in real async way
    callback = async(callback);
  
    // check provided function if it expected
    // to be run in async or sync way
  
    // expects no arguments, run it as sync function
    // unless it's function straight outta factory
    // has `.commandDescription` property
    //
    // Or it has one argument and requires context
    // must be arrow function with `context` argument
    if ((command.length === 0 || (command.length === 1 && requiresContext)) && !command.commandDescription)
    {
      runSync(this, command, callback);
    }
    else // or run it as async
    {
      // async function may return terminator function
      terminator = runAsync(this, command, callback);
    }
  
    // return provided terminator or empty function
    // if there is none
    return terminator || function() {};
  }
docs: Runs provided command/function within state context
  
  @param   {object} params - extra execution-time parameters
  @param   {string|array} command - command to run
  @param   {function} callback - invoked after command finished executing
  @returns {void}