Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
I think the name `Size` could incorrectly suggest that it is describing the size of the object after write completion, but it may make sense to rename this to `CurrentSize` or something similar.