Allow AMD module loader to set noGlobal in config to prevent moment polluting the global space.
Option has to be set ny the user otherwise everything loads as previously.

Loader would now look like this to choose noGlobal

/*jslint maxerr: 50, indent: 4, browser: true */

(function (global, undef) {
    "use strict";

    var projectString = "myProject",
        momentCDN = "//cdnjs.cloudflare.com/ajax/libs/moment.js/2.1.0/moment.min",
        momentString = "moment";

    (function (name, definition) {
        if (global.module !== undef && global.module.exports) {
            global.module.exports = definition(global.require(momentCDN));
        } else if (typeof global.define === "function" && global.define.amd) {
            var projectPaths = {};

            projectPaths[momentString] = momentCDN;
            global.require.config({
                paths: projectPaths
            });

            global.define(name, [momentString], definition);
        } else {
            global[name] = definition(global.moment);
        }
    }(projectString, function (moment) {
        delete global[momentString];

        moment.fn.newFunction = function () {
            // code
        };

        function MyFunction() {
            // code
        }

        return {
            "MyFunction": MyFunction,
            "momentPrivate": moment
        };
    }));
}(this));

requirejs(["myProject"], function (myProject) {
    "use strict";

    console.log("Private", myProject.momentPrivate);
    console.log("Global", window["moment"]);
});
Removed the cached Math variables that should have been in a different branch
Fix isValid for Unix timestamp parser
Added feature to expose normalizeUnits
Unit tests
Add unit tests
jshint fixes
Removed comments that jshint failed on
Wrap empty string test in try catch