function addOptionType(optionType) {
    assert.object(optionType, 'optionType');
    assert.string(optionType.name, 'optionType.name');
    assert.bool(optionType.takesArg, 'optionType.takesArg');
    if (optionType.takesArg) {
        assert.string(optionType.helpArg, 'optionType.helpArg');
    }
    assert.func(optionType.parseArg, 'optionType.parseArg');
    assert.optionalBool(optionType.array, 'optionType.array');
    assert.optionalBool(optionType.arrayFlatten, 'optionType.arrayFlatten');

    optionTypes[optionType.name] = {
        takesArg: optionType.takesArg,
        helpArg: optionType.helpArg,
        parseArg: optionType.parseArg,
        array: optionType.array,
        arrayFlatten: optionType.arrayFlatten,
        default: optionType.default
    }
}
Add a new option type.

@params optionType {Object}:
     - name {String} Required.
     - takesArg {Boolean} Required. Whether this type of option takes an
       argument on process.argv. Typically this is true for all but the
       "bool" type.
     - helpArg {String} Required iff `takesArg === true`. The string to
       show in generated help for options of this type.
     - parseArg {Function} Require. `function (option, optstr, arg)` parser
       that takes a string argument and returns an instance of the
       appropriate type, or throws an error if the arg is invalid.
     - array {Boolean} Optional. Set to true if this is an 'arrayOf' type
       that collects multiple usages of the option in process.argv and
       puts results in an array.
     - arrayFlatten {Boolean} Optional. XXX
     - default Optional. Default value for options of this type, if no
       default is specified in the option type usage.