Use command list instead of continue script

@kevgo 

At the moment only git-sync has continue scripts. After this is merged I will add continue scripts to each command that could support it one at time.

* I created new stash_open_changes and restore_open_changes functions in order to get rid of the need to set variables in abort / command list / undo scripts.
* Removed apart sync_branch as a command in that may error and its easier to see without it. 
* Removed pull_branch as it was causing a fetch to occur in the continue scripts
* Created a temp_filename function as the bash linter didn't like having a file being read and outputted to in the same line
I'd like to create a more generic architecture, so that manual checks like this one in each command, and custom error handlers like `write_merge_conflict_abort_script` won't be necessary.

I propose this algorithm:
* fetch the command on top of the command list and run it
* if it succeeds: remove from command list, add inverse to undo list
* if it fails (for whatever reason): leave it on the command list, don't add anything to the undo list
* when the user fixes the issue and runs "--continue", it runs the "continue" version of the first command on the list (i.e. "continue_merge_branch" instead of "merge_branch"), after that succeeds it processes the remaining list normally
* when the user runs "--abort", it runs the "abort" version ("abort_merge_branch") of the command on top of the command list, then exits
* when the user runs "--undo", it runs the "undo" version ("undo_merge_branch") of the command on top of the command list, then it processes the undo list.