Backend lvalue compilation fixes
Changed flow control in out_op() - one exit
Added lvalue-to-rvalue casts

- Don't decay sub-expressions for struct.member
- __builtin_mem{set,cpy} don't decay their operands either
lvalue and general offset-register tests
Added op-via-memory back in
Restructure of register vs register indexed backend
Volatile register ops (e.g. stack pointer dec.)

Also used for apply a register offset before an op
Enforce order for const-folding backend ops
Normalise offset-registers when copying registers
calc_ptr_step() returns 1 for constant ops with non-pointers
Use a full pointer register if dereferencing it
Fixed over-zealous use of memory references instead of literals
Register dup logic avoids adjusting the base pointer
v_to_mem_given() can work with integrals
reg_to_stack() goes through v_to_mem_given()
Redirect out_asm("...") through vstack operations
ICW if we adjust the base pointer for now
Redirect frame pointer out_asm("...")s through v_*
Allow duplication of base-pointer registers via copy
v_flush_volatile() prevents constant registers from being altered