allow pointer math using OpaquePointer type

We will now see the memory address a OpaquePointer is about when calling
its .gist, it is also now round-trippable by calling .perl and EVAL.
Also, it will return the memory address when being used as a number, so
that we can walk the bytes of a CStr or obtain addresses of Ctsructs in
a list when we know their size.