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);
      }
    });
  }
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