Making .done() fire "end" asynchronously

This lets you create and send empty stream queues to other services.
Otherwise they might not get an "end" event.  See the test for how an
empty queue might get created and when the parent would miss the "end"
event.