Add skeletal checkout()

* Asserts in repo
checkout() should throw if pass ref that does not resolve
Record parent in commit objects
Test initial commit has no parents
Update decisions
Test commits store parent