Smart wrapper around child_process.spawn using promises