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.

- Makes storage/base conform to an all Promise interface.
Merge pull request #3948 from hswolff/refactor-storage-module

Moves storage module to use prototypes for inheritance and structure.