Split devices into remote and local.
Split data handles into remote and local.
A local device represents a device that is being created using the bus. A remote represents one on the bus.
When remote devices receive packets destined to the local device, they attempt to fulfill them: by reading from the local device and sending a reply.
The local device implements a local version of Read/Write/Event, which hopefully a user can impleemnt to serve data.
Cleaned up some state stuff. Unsure about this. Currently broken.