Until now, code that depended on PyCrypto or OpenSSL was
defined conditionally (e.g. indented) in `crypt.py`. Rather than
grouping all these together, we factor out the library specific
behavior into standalone modules (but make the modules
private / protected).
In addition, added a `_helpers.py` module with common behavior
that was previously defined in multiple places.
Finally, beefed up some test cases so that the three newly added
modules had 100% test coverage.
Towards #212.