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.
Wow, pretty tricky line. Could you explain logic pls?