static group (flips) {

    if (!Array.isArray(flips))
      throw new Error ('group() expects an array of objects.');

    // Wrap each in a FLIP helper.
    flips = flips.map(flip => new FLIP(flip));

    return Object.create({

      flips_: flips,

      addClass: (className) => {
        flips.forEach(flip => flip.addClass(className));
      },

      removeClass: (className) => {
        flips.forEach(flip => flip.removeClass(className));
      },

      first: () => {
        flips.forEach(flip => flip.first());
      },

      last: (lastClassName) => {

        // To avoid layout thrashing apply all the classes up front
        // then do a second pass where last() is called.
        flips.forEach((flip, index) => {

          let className = lastClassName;

          if (Array.isArray(lastClassName))
            className = lastClassName[index];

          if (typeof className !== 'undefined')
            flip.element_.classList.add(className);

        });

        flips.forEach(flip => flip.last());
      },

      invert: () => {
        flips.forEach(flip => flip.invert());
      },

      play: (startTime) => {

        if (typeof startTime === 'undefined')
          startTime = window.performance.now();

        flips.forEach(flip => flip.play(startTime));
      }
    });
  }
Creates a group of FLIP helpers, usually used when you want to have some
form of composite animation, with related but visually independent
elements.

@static
@returns {FlipGroup} An object which has the same API as an individual FLIP
 helper, but controls the group as a whole.