mirage/irmin — pull request #55 by samoht (2014-05-27 19:15:39+00:00)
Title: Cleaner irmin api

As the log indicates this diff is big but that's not really a big change:
```
75 changed files with 2,641 additions and 2,581 deletions.
```
I've jut addedd 80 lines of code but I've shuffled quite a bit of things internally. Hopefully the external API didn't change very much.

Summary of the changes:
- IrminBranch deals with fork/merge operations (the main model)
- IrminSnapshot deals with snapshots/reverts (and is derived from an IrminBranch implem)
- IrminDump deals with import/export (currently the dump type is concrete, but easy to abstract later to support custom backend format such as Git packs)
- They all support sensible create/update/merge operation (ie. you can merge a snapshot in the current store, IrminDump.merge is the same a `git pull`, etc.).
- All the backends expose a similar interface. I've removed the half backed IrminDispatch backend as I'm waiting for a proper DHT implementation.

All the names follow what I've presented last week in the lab (slides are http://gazagnaire.org/pub/2014.05.22-irminsule-talk.pdf) especially with the `Block` / `Tag` story.

All the tests pass and the example compile.