Call USBD_Disconnect before software-triggered CPU reset

This makes sure that we'll re-enumerate on the USB, as a CPU reset
apparently doesn't automatically release the pull-up and notify the hub
that we were gone?
diff --git a/firmware/apps/cardem/main.c b/firmware/apps/cardem/main.c
index f1cbbcc..8b6be49 100644
--- a/firmware/apps/cardem/main.c
+++ b/firmware/apps/cardem/main.c
@@ -154,6 +154,7 @@
 		if (i >= MAX_USB_ITER * 3) {
 			TRACE_ERROR("Resetting board (USB could "
 				    "not be configured)\n\r");
+			USBD_Disconnect();
 			NVIC_SystemReset();
 		}
 #endif
diff --git a/firmware/apps/dfu/main.c b/firmware/apps/dfu/main.c
index 770076e..dd13fce 100644
--- a/firmware/apps/dfu/main.c
+++ b/firmware/apps/dfu/main.c
@@ -161,6 +161,7 @@
 		if (i >= MAX_USB_ITER * 3) {
 			TRACE_ERROR("Resetting board (USB could "
 				    "not be configured)\n\r");
+			USBD_Disconnect();
 			NVIC_SystemReset();
 		}
 #endif
diff --git a/firmware/apps/triple_play/main.c b/firmware/apps/triple_play/main.c
index a395ba6..5ff3222 100644
--- a/firmware/apps/triple_play/main.c
+++ b/firmware/apps/triple_play/main.c
@@ -154,6 +154,7 @@
 		if (i >= MAX_USB_ITER * 3) {
 			TRACE_ERROR("Resetting board (USB could "
 				    "not be configured)\r\n");
+			USBD_Disconnect();
 			NVIC_SystemReset();
 		}
 #endif
diff --git a/firmware/libboard/qmod/source/board_qmod.c b/firmware/libboard/qmod/source/board_qmod.c
index a5392bb..e05a454 100644
--- a/firmware/libboard/qmod/source/board_qmod.c
+++ b/firmware/libboard/qmod/source/board_qmod.c
@@ -112,6 +112,7 @@
 		break;
 	case 'R':
 		printf("Asking NVIC to reset us\n\r");
+		USBD_Disconnect();
 		NVIC_SystemReset();
 		break;
 	case 'O':