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.
Could these functions be generic templates? I think we could use 2 functions instead of 4 here.