Address comments

- proper jsdoc
- fix binding insanity by adding private methods to the prototype
and starting promise chains off with Promise.bind(this)