Soycode newapi

These commits change the API to a simpler four functions (as discussed in https://github.com/freedomjs/freedom-pgp-e2e/issues/4), and get it working for the current relatively simple tests and demo chrome app. The main thing that could probably use more cleaning up is the use of e2e.async.Result.getValue (and perhaps async/promises in general) - the e2e people have told me they plan to deprecate that within a year. And also, while I for one like this simple API, we will likely need to extend it if we want to persist encrypted data to disk (i.e. https://github.com/freedomjs/freedom-pgp-e2e/issues/7).

Feedback welcome, and I will likely poke at it a bit more to see if I can make the promise/async stuff a bit better (the exportKey function in particular is hacky, but it was the only way I could get it to not complain for the time being - perhaps getting the e2e people to allow their exportKeyRing function to select only public key would be ideal in the long term).
`*.d.ts` files are not headers like in C; they make the claim that value exist already and are linear (as in linear logic) in the sense that if you declare a value exists already, you can't also define it again. 

You could can make a separate file for just interfaces (named either .ts or .d.ts, doesn't matter). e.g a file to be called something like `pgpkey-interface.d.ts`, and everywhere this is used reference it in the usual typescript way.  probably slightly better to do that.