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.
I put it in utils, as that's the lowest level place I'm using it.

I think we do need to load it via require, because we need to ensure the polyfill is loaded before the code that relies on it runs.