Graphdriver: Add generic backend driver operation

This lets you do "docker driver $foo" to do driver specific operation.
This will be used by the devicemapper to allow e.g. resizing.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
devmapper: Add resize-pool driver operation

This lets you live-resize the devicemapper loopback files for the pool.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
devicemapper: Add docker driver resize operations

This lets you resize individual images or containers

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
devmapper: Split out BlockDeviceDiscard

This adds a BlockDeviceDiscardAll which discards everything on the device,
and makes BlockDeviceDiscard take offset and length arguments.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
devicemapper: Add trim-pool driver command

This command suspends the pool, extracts all metadata from the metadata pool and
then manually discards all regions not in use on the data device. This will
re-sparsify the underlying loopback file and regain space on the host operating system.

This is required in some cases because the discards we do when deleting images and
containers isn't enought to fully free all space unless you have a very new kernel.
See: https://github.com/dotcloud/docker/issues/3182#issuecomment-32888284

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)