crypto: add RSA encryption

Continuing from #7359.

Just public encryption for now, since this is my personal use case that I can test in real life (and it works fine). I would like to receive feedback on this part before I continue.

The API is simple: `crypto.publicEncrypt(key, buf)` returns an encrypted buffer, where `buf` is the buffer to encrypt and `key` is the public key in PEM format.
This looks nearly identical to the stuff above. May be we could add another template argument, like just an `enum PublicKeyCipher::Operation` - `kEncrypt`, `kDecrypt` and branch using this argument?