Moves storage module to use prototypes for inheritance and structure.

addresses #2852

- Moves storage modules to use prototypes and to create prototypes
that inherit from the base storage ctor.
Yeah, the problem with `GhostMailer` was that the instance I had in the test file was different to the instance the API had, and even though I rewired the config in the test, that changed config only affected the instance in the test file, the one in the API still had the default ones.

The way `GhostMailer` is implemented now (exports a `new` instance), I am able to rewrite config, and reinit mailer, and that would still work across the files.