code: function SelectionType(typeSpec) {
    if (typeSpec) {
      Object.keys(typeSpec).forEach(function(key) {
        this[key] = typeSpec[key];
      }, this);
    }
  }
docs: A selection allows the user to pick a value from known set of options.
  An option is made up of a name (which is what the user types) and a value
  (which is passed to exec)
  @param typeSpec Object containing properties that describe how this
  selection functions. Properties include:
  - lookup: An array of objects, one for each option, which contain name and
  value properties. lookup can be a function which returns this array
  - data: An array of strings - alternative to 'lookup' where the valid values
  are strings. i.e. there is no mapping between what is typed and the value
  that is used by the program
  - stringifyProperty: Conversion from value to string is generally a process
  of looking through all the valid options for a matching value, and using
  the associated name. However the name maybe available directly from the
  value using a property lookup. Setting 'stringifyProperty' allows
  SelectionType to take this shortcut.
  - cacheable: If lookup is a function, then we normally assume that
  the values fetched can change. Setting 'cacheable:true' enables internal
  caching.
  - neverForceAsync: It's useful for testing purposes to be able to force all
  selection types to be asynchronous. This flag prevents that happening for
  types that are fundamentally synchronous.