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 know this code existed previously, but since we're refactoring anyway do you think it would be possible to handle this a little more naturally by way of the promises we already have, instead of passing around the `resolve` function (as `done`) and explicitly deferring via `setImmediate`?