Move signature type checks

Move the point of checking signatures, as suggested by alex in PR 2262.
diff --git a/src/cryptography/hazmat/backends/openssl/dsa.py b/src/cryptography/hazmat/backends/openssl/dsa.py
index f1bb6d9..ec05676 100644
--- a/src/cryptography/hazmat/backends/openssl/dsa.py
+++ b/src/cryptography/hazmat/backends/openssl/dsa.py
@@ -29,9 +29,6 @@
 @utils.register_interface(AsymmetricVerificationContext)
 class _DSAVerificationContext(object):
     def __init__(self, backend, public_key, signature, algorithm):
-        if not isinstance(signature, bytes):
-            raise TypeError("signature must be bytes.")
-
         self._backend = backend
         self._public_key = public_key
         self._signature = signature
@@ -179,6 +176,9 @@
     key_size = utils.read_only_property("_key_size")
 
     def verifier(self, signature, signature_algorithm):
+        if not isinstance(signature, bytes):
+            raise TypeError("signature must be bytes.")
+
         return _DSAVerificationContext(
             self._backend, self, signature, signature_algorithm
         )
diff --git a/src/cryptography/hazmat/backends/openssl/ec.py b/src/cryptography/hazmat/backends/openssl/ec.py
index b8692e4..6764416 100644
--- a/src/cryptography/hazmat/backends/openssl/ec.py
+++ b/src/cryptography/hazmat/backends/openssl/ec.py
@@ -119,8 +119,6 @@
 @utils.register_interface(AsymmetricVerificationContext)
 class _ECDSAVerificationContext(object):
     def __init__(self, backend, public_key, signature, algorithm):
-        if not isinstance(signature, bytes):
-            raise TypeError("signature must be bytes.")
         self._backend = backend
         self._public_key = public_key
         self._signature = signature
@@ -227,6 +225,9 @@
     curve = utils.read_only_property("_curve")
 
     def verifier(self, signature, signature_algorithm):
+        if not isinstance(signature, bytes):
+            raise TypeError("signature must be bytes.")
+
         if isinstance(signature_algorithm, ec.ECDSA):
             return _ECDSAVerificationContext(
                 self._backend, self, signature, signature_algorithm.algorithm
diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py
index 8e32eb0..7da4229 100644
--- a/src/cryptography/hazmat/backends/openssl/rsa.py
+++ b/src/cryptography/hazmat/backends/openssl/rsa.py
@@ -337,9 +337,6 @@
 @utils.register_interface(AsymmetricVerificationContext)
 class _RSAVerificationContext(object):
     def __init__(self, backend, public_key, signature, padding, algorithm):
-        if not isinstance(signature, bytes):
-            raise TypeError("signature must be bytes.")
-
         self._backend = backend
         self._public_key = public_key
         self._signature = signature
@@ -578,6 +575,9 @@
     key_size = utils.read_only_property("_key_size")
 
     def verifier(self, signature, padding, algorithm):
+        if not isinstance(signature, bytes):
+            raise TypeError("signature must be bytes.")
+
         return _RSAVerificationContext(
             self._backend, self, signature, padding, algorithm
         )