usb1: Detach finalizer on duplicate registration in *.__registerFinalizer

Also, make the detection mendatory. It should only trigger on an internal
bug, so an assertion was kind of appropriate... But not detecting this
(when running on a python with assertions disabled) could lead to
double-frees.
diff --git a/usb1/__init__.py b/usb1/__init__.py
index 06d4968..130aaed 100644
--- a/usb1/__init__.py
+++ b/usb1/__init__.py
@@ -1244,7 +1244,9 @@
         registerFinalizer(finalizer_handle, self.close)
 
     def __registerFinalizer(self, handle, finalizer):
-        assert handle not in self.__finalizer_dict
+        if handle in self.__finalizer_dict:
+            finalizer.detach()
+            raise ValueError
         self.__finalizer_dict[handle] = finalizer
 
     def __unregisterFinalizer(self, handle):
@@ -1999,7 +2001,9 @@
         registerFinalizer(finalizer_handle, self.close)
 
     def __registerFinalizer(self, handle, finalizer):
-        assert handle not in self.__finalizer_dict
+        if handle in self.__finalizer_dict:
+            finalizer.detach()
+            raise ValueError
         self.__finalizer_dict[handle] = finalizer
 
     def __unregisterFinalizer(self, handle):
@@ -2355,7 +2359,9 @@
         self.close()
 
     def __registerFinalizer(self, handle, finalizer):
-        assert handle not in self.__finalizer_dict
+        if handle in self.__finalizer_dict:
+            finalizer.detach()
+            raise ValueError
         self.__finalizer_dict[handle] = finalizer
 
     def __unregisterFinalizer(self, handle):