Allow creating new branches from local branches.

1) Allow creating a new from branch from a local branch.
2) Allow creating branch from remote branch with a name different from remote branch.

Currently, we don't support non-fast-forward push. In the case where both server and client changed, there is no way to push code. This allows a turn around where:

i) Create a new branch from the current working branch.
ii) Push the new branch to the server.
iii) Merge the new branch with the original branch on the server.

@devoncarew  PTAL thanks.
I think this will only work if `localBranches` happens to be a list. Otherwise it'll create a list from the iterable, sort that, and discard it :)

So maybe:

    List branches = localBranches.toList().sort(...