code: OptionSet addOption(String key, 
                        boolean details, 
                        Options.Separator separator, 
                        boolean value, 
                        Options.Multiplicity multiplicity) {
  
      if (key == null) throw new IllegalArgumentException(CLASS + ": key may not be null");
      if (multiplicity == null) throw new IllegalArgumentException(CLASS + ": multiplicity may not be null");
      if (separator == null) throw new IllegalArgumentException(CLASS + ": separator may not be null");
      if (keys.containsKey(key))  throw new IllegalArgumentException(CLASS + ": the key " 
          + key + " has already been defined for this OptionSet");
  
      OptionData od = new OptionData(prefix, key, details, separator, value, multiplicity);
      options.add(od);
      keys.put(key, od);
  
      return this;
      
    }
docs: The master method to add an option. Since there are combinations which are not
  acceptable (like a NONE separator and a true value), this method is not public.
  Internally, we only supply acceptable combinations.