Revealing module pattern seeder.  Adds the revealing module pattern call to passed in object.  Gives said object
the revealing module pattern capability (for in browser use).
@example
```
var myApp = sjl.addRevealingModuleCall ({}, 'module');

// Creates all namespace objects, if they don't already exist, and protects them from being overwritten (uses Object.defineProper(ty|ties) internally)
// Then sets your module at the end of the chain also making it `unconfigurable` and `unwritable` as a property
// on the namespace chain though does not protect MyModule itself from being tampered with (for security on
// that level look into `Object.freeze`).
myApp.module('some.deep.namespace.MyModule', MyModule); // returns MyModule

// Fetching module that was set now becomes cleaner and module will always be there and cannot be deleted from location
myApp.some.namespace.MyModule === MyModule; // true

```

@note For similar a effect on the server side @see sjl.nodejs or 'sjljs/src/nodejs/Namespace' (
creates a dynamic module loader using object namespaces).
@function module:sjl.addRevealingModuleCall
@param obj {Object|*} - Object to set the revealing module pattern method on.
@param functionKey {String} - Key to set the revealing module setter and store to.  Default 'module'.
@param shortFunctionKey {String} - Shorthand name to use for revealing module setter and store.  Default 'ns'.
@return {Object|*} - Returns passed in `obj`.
function addRevealingModuleCall (obj, functionKey, shortFunctionKey) {
        functionKey = functionKey || 'module';
        /**
         * Revealing module function/method.
         * @note If `nsString` is undefined returns the protected modules/packages object itself.
         * @param nsString {String} - Namespace string or just property name itself.
         * @param value {*} - If passed in function/method acts as a setter.
         * @private
         * @returns {*} - Returns whatever is found
         */
        obj[shortFunctionKey || 'ns'] =
            obj[functionKey] = function (nsString, value) {
                return sjl.isUndefined(nsString) ?
                    obj[functionKey] : unConfigurableNamespace(nsString, obj[functionKey], value);
            };

        // Return namespace function
        return obj[functionKey];
    }