Make indexing a CRL O(1) instead of O(n).

This drops support for slicing, if that's important someone say something and I can add it back
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index 7b9f71c..4bddee4 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -6,6 +6,7 @@
 
 import datetime
 import ipaddress
+import operator
 
 from email.utils import parseaddr
 
@@ -872,8 +873,10 @@
             yield self._revoked_cert(i)
 
     def __getitem__(self, idx):
-        # TODO: indexing is O(n)
-        return list(self)[idx]
+        idx = operator.index(idx)
+        if not 0 <= idx < len(self):
+            raise IndexError
+        return self._revoked_cert(idx)
 
     def __len__(self):
         revoked = self._backend._lib.X509_CRL_get_REVOKED(self._x509_crl)