code: function defineProperty (key, handler, value) {
      Object.defineProperty(ctrl, key, {
        get: function () { return value; },
        set: function (newValue) {
          var oldValue = value;
          value        = newValue;
          handler && handler(newValue, oldValue);
        }
      });
    }
docs: Utility methods 
  Defines a property using a getter and setter in order to trigger a change handler without
  using `$watch` to observe changes.
  @param {PropertyKey} key
  @param {Function} handler
  @param {any} value