Support checking out branches

This includes the ability to create new branches
Update tests to support checkoutReference
Update docs