code: function(key, ext, BaseEditor) {
          if (typeof key === 'object') {
              // `key` (string) was omitted
              BaseEditor = ext;
              ext = key;
              key = 'Default';
          }
          BaseEditor = BaseEditor || this.editors.Default;
          ext = ext || FilterTree.extensions[key];
          return (this.editors[key] = BaseEditor.extend(key, ext));
      }
docs: An extension is a hash of prototype overrides (methods, properties) used to extend the default editor.
  @param {string} [key='Default'] - Nme of the new extension given in `ext` or name of an existing extension in `FilterTree.extensions`. As a constructor, should have an initial capital. If omitted, replaces the default editor (FilterLeaf).
  @param {object} [ext] An extension hash
  @param {FilerLeaf} [BaseEditor=this.editors.Default] - Constructor to extend from.
  @returns {FillterLeaf} A new class extended from `BaseEditor` -- which is initially `FilterLeaf` but may itself have been extended by a call to `.addEditor('Default', extension)`.