Split volumes out from daemon

Splits volumes into two pieces:
1) The volume itself
2) The volume as it relates to a container <- calling this a `volume mount`

Basically, a volume is just some path on the host, either created by Docker or created by the user and used in Docker.
A mount is the point at which volumes and containers intersect.

Also stops using the image graph as a means of creating/storing volumes, which really seems like a bad hack.  Instead we use the graph driver directly and store configuration specifically related to the volume which we can use later.  Is it writable, what path is it located at, and what containers are using it, is it a bind-mount, etc...
So `/var/lib/docker/volumes/<id>` will have real data in it that we can use later, not just non-sensical json data as it is today.
I was wrong about this :( Shame on me. Now your switch always return true for any error type. Your first solution was right. Should be:
```
type VolumeInUseError struct {
    path string
}

func (e VolumeInUseError) Error() string {
    return fmt.Sprintf("Volume %s is being used and cannot be removed", e.path)
}
```
Also you should probably look closer on tests, because I think such thing need to be catched.