Call back asynchronously when launching fails

This gets rid of some potential unexpected behavior (the delegate being
called back before creating the task returns).
Reorganize, add a makefile for the example