Refactor public api to use ES6 Promises

* All public apis now use promises.
* Greatly simplifies asynchronous control flow and error handling. Error handling is now done globally, the stack trace is logged, and a high level error is thrown that is understandable to users.
* If native WebCrypto is supported, two promises are started in parallel to speed up the key generation of the primary key and subkey.
* If promises are not supported by a target browser, a [polyfill](https://github.com/jakearchibald/es6-promise) is triggered by openpgp.js. This polyfill is included in the build step, so no action required on the developer's part.
* Update README and documentation to inform about promises.