Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
In all 3 cases, `ResumeWritePosition` just returns the file size. Why not just call it `Size` instead?