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.
I'm curious about this, in a "I'm really curious" way, and not a "I think this is wrong" way.  I've just never seen this method of exporting a constructed object instead of the constructor before.  Is it just because you want to enforce a singleton?