X509Backend support in OpenSSL backend

This PR adds a dependency on `enum34`. I am expecting some improvements to be needed in the docs along with potentially some comments required to explain the purpose of some of the tests.

TODO:
- [x] Resolve issue with EC public keys where curve name is not set. (resolved by raising error for now)

Depends on #1498.
I don't think we need an interface header, maybe an "X.509 Certificate object" header, and then a quick note at the class level that it's an interface, and you can get an instance for the load method.

(In case it's not clear, I think we should be down playing the interface/concrete distinction, basically none of our classes need to be instantiated, subclassed, or implemented by end users, so the documentation should be targetted towards the common use case)