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'm not sure that this comment belongs with this commit, but it might be reasonable to use an integration test build tag to separate the unit tests from the integration tests.