Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
Right. This is a big win for specific implementations so there's not a large hassle to manage a `Move` method in downstream drivers. I'm sure drivers would appreciate if a move operation was supported. I don't see a big reason to remove this, so I'm happy with keeping it in.