Support other exchange types and routing keys

This allows topic exchanges with routing keys not based off of names. It goes further than the other pull request with routing keys.