Add support for temporary registers

Load instructions can now save previous value of a register.
This helps in situations such as: A = A << 1; A = A << 1, where
using just A register doesn't enable expression expansion.

This change simplifies many places, but also causes more
expression expansion (which was only prevented by not being able
to keep old values) and leaves some trash in loops to be cleaned
up by subsequent commits.
Remove unneeded load instructions

For example SP = SP.
Fix operator's hash function.
Better stack expressions
Fix register substitution
Merge remote-tracking branch 'devdri/experimental' into experimental