Extract external scheduler scheduling logic

Extracted external scheduler scheduling logic from extension methods
into a class; makes it easier to test and alter to support versioned
messages.
Added ExternalScheduler tests and simplified class

Added tests to cover ExternalScheduler.
Extracted repeated message creation code into separate methods to make
it easier to update the external scheduler to support versioned
messages.