Destroy DeviceImpl when the underlying UsbDevice is disconnected.

A open message pipe to a DeviceImpl represents a physical resource, the
USB device connected to the host. Instead of continuing to support
handling messages sent on this pipe after the device is disconnected it
makes more sense to simply close it.

For efficiency and because DeviceImpls can outlive the DeviceManagerImpl
that created them a new observer interface is added to UsbDevice so that
the DeviceImpl can listed for the removal of the physical device all on
its own.

BUG=492204

Review URL: https://codereview.chromium.org/1695643002

Cr-Commit-Position: refs/heads/master@{#375329}
8 files changed