allow pointer math using CPointer repr

This means that NativeCall's OpaquePointer type can be gistified as
OpaquePointer<0x7f9e8db8fda0>, which will be helpful for debugging
when making bindings to C libraries. This also allows us to do basic
pointer arithmethic so that we can iterate over the bytes of a CStr
by incrementing the memory address.