Darwin device cache

This set of commits adds a cache of IOUSBDeviceInterface's to the darwin backend. This cache should fix two known issues:

 - Repeated device enumeration can cause a device to become unavailable.
 - Some devices respond very slowly to device enumeration. This can cause the stress test
   to take a very long time. Caching to devices addresses this issue.

I also took the opportunity to clean up some old code and fix a few outstanding issues.