Refactor use of graphdriver.Differ

Some graphdrivers are Differs and type assertions are made
in various places throughout the project. Differ offers some
convenience in generating/applying diffs of filesystem layers
but for most graphdrivers another code path is taken.

This patch brings all of the logic related to filesystem
diffs in one place, and simplifies the implementation of some
common types like Image, Daemon, and Container.
One of my favorite things in Go is that a struct that implements an interface does not need to declare that it implements it. So there is no dependency on them. If a package uses the interface as an interface value, then yes there is dependency. However, my understanding that the only interface people should use is Driver. The Driver interface without the Diff methods etc. is not something anybody should be using (and correct me if I'm wrong).