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!
This should be a local function that does the call to `moduleSelector` based on the settings object passed in, then ends with `return storageModule.init(settings)`... in other words, this:

    init: function(settings) {
        moduleSelector(settings);
        return storageModule.init(settings);
    }

It should probably have a try/catch around moduleSelector in case of runtime errors requiring the module and return a rejected promise with the error message so it can be handled upstream.

This then removes the need to `require('../red')` so it can be tested in isolation.