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.

Depends on #1498.
With EC keys. in my libtrust code when I call `public_numbers()` on the result of this I get an error about curves name not being set.

```
    def _ec_key_curve_sn(backend, ec_key):
        group = backend._lib.EC_KEY_get0_group(ec_key)
        assert group != backend._ffi.NULL
    
        nid = backend._lib.EC_GROUP_get_curve_name(group)
>       assert nid != backend._lib.NID_undef
E       assert 0 != 0
E        +  where 0 = 0
E        +    where 0 = <cffi.vengine_cpy.FFILibrary object at 0x7f1f9cda5690>.NID_undef
E        +      where <cffi.vengine_cpy.FFILibrary object at 0x7f1f9cda5690> = <cffi.vengine_cpy.FFILibrary object at 0x7f1f9cda5690>
E        +        where <cffi.vengine_cpy.FFILibrary object at 0x7f1f9cda5690> = <libtrust.cryptography_extras.Backend object at 0x7f1f9c85b250>._lib
```