Non det compiler part2

This branch should fix #1227. For real this time :) The real bugfix is in the third last commit, the other ones are refactoring and extra docs and tests. The problem I think was that the register allocator pops from the live interval and sync point heaps until they are both empty. The smaller values are popped first. The problem is that if two live-interval-states have the same start slot, they are equally small and you dont know which one it will choose so you get non-deterministic code generation. The fix was to take the pair "start" and "end" together, so that if two intervals have the same "start" the smaller one is picked first.