[devmgr] Remove Devnode from devfs on desctruct

This allows devfs to be initialized in tests, and then shutdown without
aborting on the intrusive list destructor.

ZX-3286

Test: Ran Fuchsia and /system/test/ddk tests.
Change-Id: If4160854844ef14941d66c2e06675f0fc9fd9a8a
diff --git a/system/core/devmgr/devmgr/devfs.cpp b/system/core/devmgr/devmgr/devfs.cpp
index 6d79282..d5325dc 100644
--- a/system/core/devmgr/devmgr/devfs.cpp
+++ b/system/core/devmgr/devmgr/devfs.cpp
@@ -107,6 +107,7 @@
 // BUG(ZX-2868): We currently never free these after allocating them
 struct Devnode {
     explicit Devnode(fbl::String name);
+    ~Devnode();
 
     Devnode(const Devnode&) = delete;
     Devnode& operator=(const Devnode&) = delete;
@@ -549,8 +550,11 @@
     : name(std::move(name)) {
 }
 
-DcIostate::DcIostate(Devnode* dn) : devnode_(dn) {
+Devnode::~Devnode() {
+    devfs_remove(this);
+}
 
+DcIostate::DcIostate(Devnode* dn) : devnode_(dn) {
     devnode_->iostate.push_back(this);
 }