Pointer arith changes

These changes need code review, passes all tests.
I've added some more advanced constant expressions, and allowed pointer arithmetic of the type (1 + p).
No doubt needs more testing for edges cases.