WIP add full git support

Hey, wanted to open up this PR as a place to discuss the correct way to add git to this.

I spiked out an initial version that seems to work, but its not fully in memory and writes files temporarily to a temp directory.
`checkoutable`? I see why it's a hard name.