Merge storage implementations from sub-repos

Merging all of the functional storage implementation into the main repository. This ensures that each deploy will create all required artifacts, and so we don't end up with modules missing from versions. It should also ensure that storage implementations are kept up-to-date with any API changes. The downside is that test running will become a little more difficult, due to test dependancies.