'ipfs get' to checkout commits and MerkelDag objects as files

We get the `ipfs get` command that allows to retrieve the MerkelDAG objects as files and directories.

Another thing is that I added commits. Now for every run of `ipfs add` that results in nonzero object addition, there is also a root commit node:
```
dag.Node{Data: "Commit Message", []*dag.Link:[(link to the root tree node),]}
```

I had to add it to make `ipfs get` work: there was this issue with the `git add` that the filenames weren't reflected in the resultant Node. These names are stored in `dag.Link`, not `dag.Node`. It makes perfect sense and is this way in `git` as well, because this way you can just link to the same node even when the file is renamed, duplicated or moved, but if you want to save filenames you need to have the root node. 

**A Practical Example.**
let's store the IPFS's codebase in the IPFS commits!
```
     git clone git@github.com:jbenet/go-ipfs
     cd go-ipfs
```
Now we add all the files (including the `.git` directory)
```
     ipfs add -r *
```
and get a long list of the files added. And the last line contains the commit's hash:
````
     < ... >
     added commit QmW5SA2TvAB6smGb6dQMn6DME4f9R3N2Ayu7CT3WFzvRNi
```
Now we erase the whole directory and restore stuff like nothing happened:
```
     rm -rf *
     ipfs get QmZysrZPbXnmrCL6LeqEfHm5e69aR3hMyAqzTPexJ6k7Ku (commit's hash)
```
cool beans.