Save restore device Id: issue #8978

Fixes #8978

During testing of docker with device mapper backend, I often noticed bunch of warnings on console and often thought that if something is wrong with my docker setup. It turned out that docker does not keep track of already used device ids.  This patch series should make docker little bit smarter about it.

More details are in issue and patches. Please review and pull.

Thanks
Vivek
Well if you don't feel like converting the other functions to the same marshal/unmarshal(encoder/decoder) then change this one back while still checking for the `os.IsNotExist` error so that they are at least consistent with the other functions within the file.