Implement branch manipulation

Just a first pass at getting a `getReferences` function going; should be useful.

Wanted to get what's here on your radar first, @kevinsawicki. ~~Is using `std::set` ok, or can I manipulate the array better?~~

- [x] Better error validation (long branch names, weird chars)
- [x] Support checkout
- [x] Support `git checkout -b`

Could not have gotten as far as I did without stumbling onto a post by @ben: http://ben.straub.cc/2013/06/03/refs-tags-and-branching/. Thanks man!