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 different name.

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.
2) Push the new branch to the server.
3) Merge the new branch with the original branch on the server.

@devoncarew  PTAL thanks.