Use promises in the JS contents API

Switch from passing success/error callbacks to returning ES6 promises.

Opening early so we can see if Travis likes simple promise use cases.
My problem with requiring it is that it isn't really used like a require module.  Instead it injects itself into the global namespace if Promise isn't defined or is partially defined.