Initial draft for a Git backend

The current idea:
- we keep the same SHA1 as the one computed by Git, we just project the loose objects into something simpler
- both the leaf nodes of irmin trees and blobs objects have the same sha1. this should not break the API (as we explicetely look in the blob or tree store when we do a Tree.find or Tree.sub) but we need to modify the FS backend to store objects of different kinds in different dirs.

This way, we avoid to recompute the SHA1 of all the objects and to create new tree leaves when we pull.

As we start to have non-deterministic keys (which depends partly on the backend, ie. on the way the objects are serialized), we need to be a carreful when implemeting the push operations. But that should be fine: we will only loose sharing opportunities but the assumption is that a writer will write on only one kind of backend so all the keys will stay locally consistent.
Add ocaml-git in the depends of Travis CI
travis++
The Git backend compiles.

Start hooking it into the tests. Consequence: the tests do not pass.
Pretty print the hex of SHA1 keys in the s-exp dumps
All basic test for the Git backend work

Now need to fix the high-level ops and sync tests
Add missin file
Test git in-memory, git on-disk, CRUD + git-on-disk

Basic tests + high-level ops work.

Need to fix the sync test now.
All basic tests pass.

- Needed to add a fixed origin for Irminsule commits (which got translated at the moment into a fixed commit date).
- Minor API changes to expose Key.of_raw and Key.to_raw

The CRUD over GIT backend is broken, seems to be a pb related to JSON serialisation of references
All the tests are green!
Add the ability to select the Git backend in the command-line tool
Use a reference name for simple irminsule backends which is similar to Git
Select debug/info on the command line

--debug -> debug
--verbose -> info
Properly serialize the server exceptions to send to the clients
The command-line tool now looks in the env variables for the default store configuration

Use:
- IRMIN=m        -> in-memory
- IRMIN=g        -> git
- IRMIM=l:<path> -> local
- IRMIN=r:<uri>  -> remote

You can still force the command-line tool selection by adding some options to the command line.
Improve some outputs
`irmin dump` can also choose the store backend
Change the way we represent trees.

Until now, each node could carry a value (a la xenstore).
From now on, only the leaves can carry a value (a la git).

That's easy enough to revert later, and it's easier to map the Git backend.
Make a very fragile version of the watches work again

It works only if you:
- start an HTTP server (using 'irmin init -d')
- watch using the REST API (connect your browser to http://127.0.0.1:8080/watch/<path>)
- use the REST interface to do modify the database
  (for intance 'curl -d '{ "params": "xxx" }' http://127.0.0.1:8080/update/<path>/XXX)

I know how to make it work between backends, I'll do it later.
Merge pull request #17 from samoht/git

Initial draft for a Git backend