Actually end the tree src streams.

This is tricky because of our async blob lookup. This could probably be
done in a nicer way but it's late and I'm tired so I'll revisit later.
Basic implementation of creating commits.

Kinda fiddly right now and probably could benefit from some refactoring,
but a reasonable proof-of-concept.

In particular, for some unexplained reason trying to set the commit parent
causes a hard crash due to an assertion inside nodegit. Will investigate
later, but for now we just always generate parentless commits.