StorageDriver interface changes and cleanup

Mostly, this PR begins the process of hardening the storagedrivers. Several interface changes are included, in addition to cleanup in the filesystem and inmemory implementations. More tests have been added to solidify some ambiguities, as well.

Unfortunately, this PR will break the build. Specifically, we are having issues with ipc and the azure and s3 drivers need to be updated separately.  This is necessary for coordination and progress.

This pull request supersedes #716 and addresses issues called out in #791 and #781. #814 will be addressed in a separate PR.

Please see the commit messages for details.

@BrianBland @AndreyKostov @dmp42 @ahmetalpbalkan