code: function verifyIntent(subject, op, target, data, cb) {
    var type = (_.isString(target)) ? target : target.type;
    var listeners = listenersFor(op, type);
    if (listeners.length === 0) { return cb(); }
    if (data && data.uuid) { delete(data.uuid); } // uuid is immutable, so don't include - even if it's in the data
    var intent = new Intent(subject, op, target, data);
    async.each(listeners,
      function(listener, callback) {
        try {
          listener(intent, callback);
        } catch (err) {
          cb(err);
        }
      },
      function(err) {
        cb(err, target);
      }
    );
  }
docs: callback is just: function(err) if err, action should be abandoned & error is propogated no data is allowed to be changed by the function