changed up the API to be more event-centric, added child_process helper