Closes #9. Complete implementation / conversion to Promise style API.