Decode audio data with promises

This is the first of two pull requests for adding promises to appropriate places in the Web Audio API.

Let me know what you guys think! If possible I'd like to get some feedback on this before moving on to `offlineContext.startRendering()`.

(The "remove trailing whitespace" commit is purely optional; if you guys like your trailing whitespace let me know and I can remove it from the branch.)