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.
It looks like we need to `throw` it instead of returning. I'm working from this description: http://www.html5rocks.com/en/tutorials/es6/promises/#toc-errors-in-practice