splitRecordParts = (specimen, requiredPatt, optionalPatt) => {
    // Not frozen! Mutated in place
    /** @type {[string, Passable][]} */
    const requiredEntries = [];
    /** @type {[string, Passable][]} */
    const optionalEntries = [];
    /** @type {[string, Passable][]} */
    const restEntries = [];
    for (const [name, value] of entries(specimen)) {
      if (hasOwnPropertyOf(requiredPatt, name)) {
        requiredEntries.push([name, value]);
      } else if (hasOwnPropertyOf(optionalPatt, name)) {
        optionalEntries.push([name, value]);
      } else {
        restEntries.push([name, value]);
      }
    }
    return harden({
      requiredSpecimen: fromUniqueEntries(requiredEntries),
      optionalSpecimen: fromUniqueEntries(optionalEntries),
      restSpecimen: fromUniqueEntries(restEntries),
    });
  }
@param {CopyRecord<Passable>} specimen
@param {CopyRecord<Pattern>} requiredPatt
@param {CopyRecord<Pattern>} optionalPatt
@returns {{
  requiredSpecimen: CopyRecord<Passable>,
  optionalSpecimen: CopyRecord<Passable>,
  restSpecimen: CopyRecord<Passable>
}}