rwuio: fix 32 bit wide access on 64 bit platforms

"long" and "unsigned long" are architecture specific, i.e. 4 bytes on
32bits platforms, and 8 bytes on 64bits platforms. "unsigned int" is
always 4 bytes.

Access width is very important for hardware register access as it may
exercise different logic in the controller.
rwuio: implement 64 bit access
rwuio: tolerate negative offset (don't segfault)

entering "rwuio -r -4" caused a segfault

Negative offsets might be useful since UIO maps can contain an offset,
and a negative offset in rwuio could allow access to data in the mapped
memory below the UIO map's offset.