set transition(descriptor) {
      if (descriptor) {
        // Ensure setter/getter has been created for all props in transition
        for (let propName in descriptor) {
          if (descriptor.hasOwnProperty(propName)) {
            defineTransitionPropInterceptor(propName, this)
          }
        }
      }
      this.transition$descriptor = descriptor
    }
Handle the special "transition" property. The descriptor should be an object with
transitionable property names as keys and transition parameters as values. The
transition parameters can either be objects describing the transition parameters,
or `true` for a default transition.

  transition: {
    x: true, // uses a default duration-based transition
    y: 'spring', //uses a default spring-based transition
    z: {
      // ...custom transition config
    }
  }

The custom transition config object can take one of two forms for duration- vs.
spring-based animations:

Duration-based:

  {
    duration: n, //in ms, defaults to 750
    easing: e, //easing function, defaults to 'easeOutCubic'
    delay: n, //in ms, defaults to 0
    interpolate: 'number' //one of the builtin named interpolators ('number', 'color', etc.) or a custom Function
  }

Spring-based:

  {
    spring: s, //either `true`, a named preset string e.g. "wobbly", or an object with {mass, tension, friction}
    delay: n //in ms, defaults to 0
  }

Note that spring-based transitions do not currently support custom interpolations so they should only be used
for numeric values.