Return a promise rather than an event emitter

[discussed in #1902]
Use native Promises when available
Update jshintrc
Merge pull request #2021 from ForbesLindesay/2_0_0-promises

2.0.0 promises