Prevent circular dependency with disaptcher

Adding listeners to the dispatcher as it is instantiated creates a circular dependency whenever a listener (or one of its dependencies) also depends on the dispatcher. The issue is fixed by waiting until the container is fully populated to add listeners to the dispatcher.
This was split out for a reason... can't remember why though. Will look at history later.