DO NOT MERGE YET: Re-structuring storage init.

Hi Nick, this is a pull request to show you what I think is a possible way of re-wiring the storage/index.js so that it's more like an interface. I'm interested in your thoughts on it.

Please check if I'm going down on the right path. Also, where do I want to call <code>moduleSelector(settings);</code> from?

I'm not sure if I can call it from <code>storageModuleInterface</code> I defined unless I pre-define some kind of dummy object for <code>storageModule</code>.

Alternate ideas:

We could also possibly (although I don't know enough about JavaScript yet to see if this actually makes sense):

var storageModuleInterface = {
        init : function(_settings) {
            moduleSelector(settings);
            return storageModule.init(_settings);
        }
...........
}

storageModuleInterface.init();
module.exports = storageModuleInterface;



Or alternatively, a somewhat simpler model, but one that changes the existing external interface:

......
        init : function(_settings) {
            moduleSelector(_settings);
            return storageModule.init(_settings);
        }
......
Thanks!
@knolleary  my work is still in progress but I would appreciate if you could take yet another look at my changes affecting index.js. Is this what you had in mind?

I need confirmation that my changes are indeed acceptable as I had to "pre-initialize" storageModule so that it indeed can be exported/required. Then it's the init function that does the proper initialization. Do you have any workaround in mind how we can avoid the <code>moduleSelector(dummySettings);</code> call?

Thanks