Implement UMD pattern to support browser include, Node & Require