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).

Let me know of any improvements/edge-cases.