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.
Since this is a polyfill, you only need to include it once early in the load hierarchy.  In the widget promises, I do it in main.js as the first dependency.