feature: checkout commands

TODO's:

- [x] Checkout a commit (untested)
- [ ] Checkout/reset files to HEAD or any commit (equivalent to: git checkout -- file.txt)
- [ ] Checkout references
- [ ] Checkout repo HEAD (git_checkout_head() - not sure if needed)