Move aufs to a storage driver, add devicemapper and dummy drivers

This pull request moves storage capabilities to its own subsystem, and adds a driver API for pluggable storage backends. The driver system is used to store containers, images and volumes.

- [x] Implement driver API
- [x] Create a new 'init layer' for each container instead of sharing the same one, to fit the driver API
- [x] Move aufs to its own driver
- [x] Integrate lvm/devicemapper implementation by @alexlarsson into a driver
- [x] Implement a new "dummy" driver which uses regular copy instead of copy-on-write
- [x] Implement compatibility layer with existing containers, images and volumes
- [x] Diff size needs to be implemented for devicemapper
- [x] Volumes managed by docker with existing data are not handled properly with devicemapper
- [x] Images with syslinks for files in the docker init layer fail ( ubuntu 12.10 )
- [x] Prohibit more than 42 layers for compat purposes
- [x] Reset dir mtime on apply layer
- [x] Ensure mount points are unmounted on shutdown
- [x] Fix docker pull, wait on already in progress
- [ ] ~~Full test coverage on all drivers~~ *we don't have 100% coverage but it's much improved and good enough to ship*
- [x] Cannot toggle drivers at all because metadata is still stored in /var/lib/docker/graph (see https://github.com/shykes/docker/pull/51)
- [x] DM diff size and export not calculated properly

Updated tasks by @vieux on 11-20-2013 01:51 PM