Allow write-blob to accept a function that writes the blob data

In addition to the other things it already accepts, which is anything that
clojure.java.io/copy accepts as its first argument. Update docstring to
clarify the flexibility. Changed the write-tree docstring to refer to the
write-blob docstring so that they don't have to remain in sync.
Tweak repl.clj

Require all remaining hesokuri.* namespaces
Fix public-key coersion function - it did not invoke ex-info properly
Merge read-tree and read-tree* into a single function

This function performs different operations depending on the arity used. Passing
one argument makes read-tree non-recursive, while using an arity that accepts
git-dir makes read-tree recursive.
Add hesokuri.git/add-blob function for adding a blob to a tree
Fix a test test-write-blob-failure, which failed occasionally

We were getting an IOException because stdin of the git sub-process was closed
and we were writing to it. We actually want an ex-info to be thrown.
Add add-peer function

This can possibly be used directly by the user to add a new peer to the
configuration.