Remove volumes after build

Since these volumes are both unreferencable, and should be completely
reproducible by subsequent builds, they can be safely removed.

Resolves #6993 which was closed but not dealt with.

In the original implementation we decided that the way `docker rm -v` was traversing the whole container graph to see if any of the containers were referencing the volume being deleted was not ideal, especially when it's called after each build step (or even just at the end of the build).
Instead this is now implemented with a volume->container mapping.
Incidentally this is also laying some of the groundwork for first class volumes.
I wonder if we can move this to `Volume` object as map[string]struct{} and make some of functions below `Volume`'s methods. This allow to remove duplication between `s` and `refMap` and possibly make code more clear.