Runtime: Add DeviceSet singleton

This adds a DeviceSet singleton to the Runtime object which will be used for
any DeviceMapper dependent code.
Runtime: Add MountMethod to allow AUFS and device-mapper to coexist
Image: Initial support for device-mapper mounts

This supports creating images from layers and mounting them
for running a container.

Not supported yet are:
* Creating diffs between images/containers
* Creating layers for new images from a device-mapper container
Image: Deactivate image device when unmounting container

There is no need to keep all the device-mapper devices active, we
can just activate them on demand if needed.
Image: Always create a .docker-id file in the devices we create

Without this there is really no way to map back from the device-mapper
devices to the actual docker image/container ids in case the json file
somehow got lost
devmapper: Base the device-mapper names on the root dir name

This means the default is "docker-*", but for tests we get separate
prefixes for each test.
Implement docker diff for device-mapper

To do diffing we just compare file metadata, so this relies
on things like size and mtime/ctime to catch any changes.
Its *possible* to trick this by updating a file without
changing the size and setting back the mtime/ctime, but
that seems pretty unlikely to happen in reality, and lets
us avoid comparing the actual file data.
Archive: Fix up tar commandline arguments in TarFilter()

There is no need to duplicate the compression flags for
every element in the filter.
Make TarFilter more useful

There are a few changes:
* Callers can specify if they want recursive behaviour or not
* All file listings to tar are sent on stdin, to handle long lists better
* We can pass in a list of filenames which will be created as empty
  files in the tarball

This is exactly what we want for the creation of layer tarballs given
a container fs, a set of files to add and a set of whiteout files to create.
Implement container.ExportRW() on device-mapper
Runtime: Delete corresponding devices when deleting container
Delete corresponding Devices when deleting Images

If an image is deleted and there is a corresponding device
for that image we also delete the image.
Add DeviceSetWrapper

This wraps an existing DeviceSet and just adds a prefix to all ids in
it. This will be useful for reusing a single DeviceSet for all the tests
(but with separate ids)
Reuse a single DeviceSetDM for all the tests

We wrap the "real" DeviceSet for each test so that we get only
a single device-mapper pool and loopback mounts, but still
separate out the IDs in the tests. This makes the test run
much faster.
Limit the amount of prints during normal runs

This removes some Debugf() calls and chages some direct prints to
Debugf(). This means we don't get a bunch of spew when running the
tests.
Allow specifying the docker client path in _DOCKER_INIT_PATH

I currently need this to get the tests running, otherwise it will
mount the docker.test binary inside the containers, which doesn't
work due to the libdevmapper.so dependency.
tests: Store the loopback images for test outside unit-tests

This directory is copied to each test prefix which is really
slow with the large loopback mounts.
Always start tests from a clean set of loopback images

This way we don't get any issues with leftovers
DeviceSet: Add UnmountDevice()

Right now this does nothing but add a new layer, but it means
that all DeviceMounts are paired with DeviceUnmounts so that we
can track (and cleanup) active mounts.
deviceset: Cleanup device sets on test end

We unmount all mounts and deactivate all device mapper devices to
make sure we're left with no leftovers after the test.