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.
There were 2 places in the code base where `Diff` was being called and they had different use cases, one was to get a diff of a layer and its direct parent and the other was to get the diff for a container. AUFS handled both cases the same but the logic was different for each case for the other graph drivers. I split Diff into these two to differentiate the use case. I changed the names of the other methods because either the parameters changed or the name matches the use case better.