Fix queue draining, add drain_once()

Also fixed a test that was explicitly testing broken behavior
and added a test of drain_once() the demontrates its usefulness.