Add Diffie-Hellman support, using Bouncy Castle if it is available.
Install Bouncy Castle as the crypto provider, although it should not
be used except when we explicitly use it.
Cipher/Decipher should always returns a buffer even if it is empty.
Enable cipher benchmarks now that we have DH working.
Split up crypto files into separate classes.