dm: Correctly handle missing target when applying layer

Ensure targetStat is nil when the target doesn't exist, which is
what the following code expects.
dm: Correct the is-directory checks
dm: Extract block devices the right way

We want to mknod Rdev, not Dev (which is the device the layer is on)
dm: Apply uid/gid and mtimes when applying layer
dm: Set umask to 0 while applying layer

We need to be able to set any kind of mode
Make VolumeSet an interface, with a VolumeSetDM implementation

This way we can later avoid linking in the device mapper code into the
client, to avoid making it link to libdevmapper
Split daemon into its own binary

This way we can add dependencies to the daemon without affecting
the client, which is problematic for using the client from inside
the docker container.

We also ensure that we mount the client binary in the container
by rewriting docker-daemon to docker in sysInitPath.
Remove libdevmapper dependency from client

We create a VolumeSetFactory which we set from the daemon
only, allowing us to move the devmapper dependency into the
daemon. This allows the client to run inside the container without
this dependency.