initial commit
partial fix to remove_block

Code now compiles and runs with no exceptions, however remove_block is
not actually deleting blocks
Fix to remove_block
Bug fixes and extensions to util.py
Add blocks to worklist if only one exit from block

Also added constant propagation
Check if variable is input to program via not having def site
checking for state of variables when assigned to by foldable ops

Some functions also moved from constant_propagation to util as also used
in condtional_constant_propagation
Algorthim fully written, but buggy

Issue with direction of conditional branching.
Working code

I think this is now fully working. Unfortunatly the algorithim as give
is a little vague in places, and we seem to have just skipped over it in
my written notes. Where we move on in the example in the notes does not
match what this puts out, and looking over it, the example only makes
sense stopping where it does to better demonstrate aggresive dead code
elimination.
Remove RSB from memory ops
BL added to memory ops
removing early constant progigation, not finished
further work needed - working on when constant propogation occurs
delay to propagation
Commit before attempting change to how work list functions - moving to statement based rather then block based
Redone

Sorry, this has taken longer then I expect as the code had gotten
unreadable and it was easier to start again.
Working. Still needs slight clean up in removing references to next blocks that have been deleted. Also does not delete empty blocks.
Just need to remove branch instruction when matching compare has been removed

Empty blocks are also not removed.
Completed other then deleting of empty blocks. May need more comments
Merge branch 'conditional_constant_propagation'

Conflicts:
	src/util.py