Add a datastore function to find matching rows
Add method to load all resources from a stack
Add method to load a stack by name
Add a no-op call to all processes

This effectively pauses the message queue for a particular process for
the specified number of cycles, delaying processing of the next message
in the queue until after messages on other queues are processed.
Don't converge out-of-date resources

When checking a resource against a template, ensure it is the latest
template requested by the user, otherwise stop processing.
Add a translate() method to the Dependencies class

This makes it easier to convert between e.g. logical resource names and
database IDs.
Support loading a non-existent template

Upon deleting a stack, we'll want to set the current template to None.
This allows everything to work transparently in that case.
Improve logging of Resource.delete()
Add a method to clear all datastores

This will be useful for cleaning up after a test.
Add a test scenario runner to the framework
Run scenarios from main()
Add a test proxy into the scenario globals

This will enable the unittest-style test cases to make assertions at
different points of execution. The assertions themselves are inserted
into the message queue of the engine, so the timing can be controlled
using no-ops.
Add a unittest-based test suite for scenarios

This can be run directly using:

  ./test_converge.py

or (equivalently):

  python -m unittest test_converge

or with a test runner such as nose:

  nosetests test_converge