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.
Well, FWIW I think `InvalidVersion` should probably hvae an attribute that
contains the numeric version. I think I'm ok with not raising eagerly
though.

On Sun Dec 14 2014 at 5:33:59 PM Paul Kehrer <notifications@github.com>
wrote:

> In docs/x509.rst
> <https://github.com/pyca/cryptography/pull/1499#discussion-diff-21802196>:
>
> > +
> > +    .. versionadded:: 0.7
> > +
> > +    An enumeration for X.509 versions.
> > +
> > +    .. attribute:: v1
> > +
> > +        For version 1 X.509 certificates.
> > +
> > +    .. attribute:: v3
> > +
> > +        For version 3 X.509 certificates.
> > +
> > +.. class:: InvalidX509Version
> > +
> > +    This is raised when an X.509 certificate has an invalid version number.
>
> I'm not sure either. Would we want to raise exceptions eagerly on all
> types of errors? I think I'm leaning towards saying we should raise on
> access (but on a hypothetically validity API we'd error on something like
> this...which brings up an interesting idea since I sincerely doubt normal
> chain validation checks certificate versioning).
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/pyca/cryptography/pull/1499/files#r21802196>.
>