Switched everything to use cryptography instead of pyCrypto

Motivation:

* Adds PyPy support
* Performance improvement
* OpenSSL and friends are better audited than PyCrypto
* Easier windows install flow (Cryptography provides statically linked wheels
  on Windows)

This PR is basically complete on the code side, of course it can always use
more review :-)

Tests all pass locally (tested with PyPy!)

Still needs some docs work, and to figure out how to do this with the version
numbers so people's stuff doesn't suddenly get broken.
65537 is the public_exponent here, it's generally considered a good default (it's what PyCrypto uses). Would passing it as a keyword-argument make this easier?