Change the behavior of MessageHandler.transition()

Now reflects usage in the tests, i.e. a QueueMessageHandler only needs queue_length to be defined, not throttle_rate.
modify tests

less duplicated code, some other changes to (hopefully) improve reliability. Tested locally about 30 times without encountering any failures.