Accept an optional node-style callback, and also return a spec-compliant Promise!