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.
same