option(flags, description, parseArg, defaultValue) {
    return this._optionEx({}, flags, description, parseArg, defaultValue);
  }
Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.

The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required
option-argument is indicated by `<>` and an optional option-argument by `[]`.

See the README for more details, and see also addOption() and requiredOption().

@example
program
    .option('-p, --pepper', 'add pepper')
    .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument
    .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default
    .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function

@param {string} flags
@param {string} [description]
@param {(Function|*)} [parseArg] - custom option processing function or default value
@param {*} [defaultValue]
@return {Command} `this` command for chaining