Change routing table dispatcher to handle opt outs

At the moment, we rely on an opt out middleware attached to the routing table dispatcher for this. The plan is to move this handling onto the routing table dispatcher. This will help make #1127 possible.
Should be safe if we rewrite it to use the new helper. The helper doesn't reprocess a message if it already has opt out metadata.