message: Check for virtual users earlier in the M->I message case
  Rather than do a database query then check if server.claimsUserId,
  just do that claims check first for all servers (since most people
  just have a single server).
  This saves about 5-10Hz of database queries on Freenode.
diff: @@ -1015,6 +1015,16 @@ MatrixHandler.prototype._onMessage = Promise.coroutine(function*(req, event) {
  (event.content.body ? event.content.body.substring(0, 20) : "")
  );
  + // check if this message is from one of our virtual users
  + const servers = this.ircBridge.getServers();
  + for (let i = 0; i < servers.length; i++) {
  + if (servers[i].claimsUserId(event.user_id)) {
  + req.log.info("%s is a virtual user (claimed by %s)",
  + event.user_id, server.domain);
  + return BridgeRequest.ERR_VIRTUAL_USER;
  + }
  + }
  +
  // wait a while if we just got an invite else we may not have the mapping stored
  // yet...
  if (this._processingInvitesForRooms[event.room_id + event.user_id]) {
  @@ -1142,12 +1152,6 @@ MatrixHandler.prototype._onMessage = Promise.coroutine(function*(req, event) {
  );
  });
  - // We know ircRooms.length > 1, and the only time when a promise is NOT made
  - // is when it's a virtual user. TODO: Tidy up control flow here.
  - if (promises.length === 0) {
  - return BridgeRequest.ERR_VIRTUAL_USER;
  - }
  -
  yield Promise.all(promises);
  });
  