Improvements to code generation

Handle the main function separately so that the function prologue isn't
emitted for main(since main can't be called in our language).

Set the stack pointer to point past the program text in the first
instruction.

Clear the ArrayList code so that if generate is called more than once on
the same object it should produce correct code.
Correctly set the branch offset of existing labels
Only emit moves if source and target are different
Emit code to fetch function arguments
Assign fp <- sp during function prologue
Make getGBP and getFP public static
Emit instruction for load nodes
Make function for creating addressing from Adda
Emit code for store nodes