Refactor design of Branch

- Change branch to mimic Git functionality. It acts a soft-link to an
  existing reference. In this case the reference is a commit.