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.
I just discovered that `Sign`/`Verify` code allows users to pass X509 certificate, could you please add support for it here? Seems like a matter of a 4-5 lines, right?