Unlike the respirate smoke test, where we can run test strands,
monitor is hard coded to use specific models. Change this so that
when it runs in test mode, it uses a stubbed model, a new class
named MonitorResourceStub. MonitorResourceStub stubs methods for both
monitoring and metric exporting. It's designed to exercise most of
monitor's surface area.
This runs using four stubbed resources:
* up: resource that always reports pulse as up
* down: resource that always reports pulse as down
* evloop: resource that uses an event loop
* mc2: resource that reports a metric count of 2
For each resource, it checks for expected logged output.
It runs 4 separate processes in different partitions. The stub doesn't
respect the parititioning, and doesn't use the database. The smoke
test does check that the logged messages show expected partitioning.
Similar to the respirate smoke test, run the monitor smoke test
in CI whenever a related file changes.