[WIP] Support more kinds of Git data

**:warning: NOT READY TO MERGE :warning:**

Improvements to refs, commits, trees, and blobs.

Doing this work has kinda frustrated me with the inconsistencies in the APIs we're using (like different input structure for GETing a ref versus PATCHing it, or fetching a ref vs. fetching its tree directly). I'm wondering if there's some deeper refactoring that can be done here.

**To do:**

 - [ ] Get a commit by SHA
 - [ ] Get a tree by SHA
 - [ ] Create a commit
 - [ ] Create a blob
 - [ ] Unit tests