Retooled the API to be future/async based and added in a bunch of options as well as exception handling