Fix printing of nodes and list userdata as part of exception string.
Major API change Support get/set variable data length.

* Adds optional data_width parameter to Device::get/set
* Allows raw get/set of variable length.
* Removes Device::_get/_set in favor of using _read/_write
  for all device transactions.
* TODO data widths > 4 bytes are not currently working.