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.
Looks like the Promise returned by catch is never used. With the individual catch methods in all high level API methods this catch should be obsolete.