Split out polymorphic write-blob logic into separate function

Rather than hide polymorphic behavior in a docstring, make it explicit by
putting it in a separate function. Also, rewrite write-blob so that prog1
like logic uses try/finally rather than (first [RESULT action]), the former
being more consistent with immediately surrounding code and somewhat less
obfuscated.
Clarify the meaning of the source path value in hesokuri.hesobase
Move repo/log to git/log and make it more flexible

It now supports processing the result of invoke-streams, rather than just
invoke-with-summary. Remove mocks in tests that existed only to make the logs
cleaner. The logs are currently very noisy, so these are not helping at all.
Create let-try macro, use it in hesokuri.git where appropriate
Allow hesokuri.ssh connections to use multiple sessions

The plan is for each session to host a single hesoprot command, so that multiple
commands do not require re-authenticating. By using the SSH session in this
manner, we don't have to manually escape or delimit data generated by something
like git-receive-pack and git-send-pack. We can just attach the session streams
to the STDIO of these commands, and close the session when the commands are
finished executing.
Move some logic from repo/branches to git/branches

This will come in handy for tests I need to write later, where the tests are not
related to the hesokuri.repo namespace.
Implement Git pushing over our SSH connection

Also, move SSH testing utility from hesokuri.ssh-test to the shared testing
namespace, so we can use it from hesokuri.hesoprot-test. In
hesokuri.hesoprot-test we create an actual SSH connection.