Removed anonymous function wrapping retFn default.

Because the body of the anonymous function only called another function which was passed the same argument as the wrapper, the wrapper was actually redundant.  Instead you can just pass a reference to the function you want to call, and it will be executed with the proper arguments at runtime.
Changed conditional checks for undefined variables to use safer idiom.

Basically, whenever checking for undefined values it is always preferrable to use the `typeof` method.  Consider:

   this.undefVariableName === undefined  // true
	undefVariableName === undefined  // throws a reference error!
        	     null === undefined  // true ( this is wrong, null is not the same as undefined )

the typeof argument is a much more reliable method for finding undefined variables:

	typeof this.undefVariableName // 'undefined'
	typeof undefVariableName      // 'undefined'
	typeof null		      // 'object'
Changed typeof check on colorsAssigned to a hasOwnProperty conditional.

In this case it is simpler and more precise to use `hasOwnProperty` to check for the existence of `itemType` on `colorsAssigned`.  This is both more consise and prevents the possibility of a collision with a key that matches `itemType` on the prototype of `colorsAssigned`.
Added top-level anonymous self-executing function

It is idomatic to wrap your code in a big anonymous function, this prevents your local functions like `objSome` from bleeding into the global scope.  Subsequently you'll need to export any global variables you need to access elsewhere.

The syntax of the anonymous execution scope is very much a matter of taste, I like to use an arg called scope to export any  variables, ( here scope is window ) this makes transporting the code to another environment easier: for example, node.js does not have a `window` global.
Moved utility function definition to top.

I find it's much easier to keep track of what's going on when utility functions like `objSome` are defined at the top, rather than the bottom.
Added strict mode declaration to top of anonymous scope.

In strict mode browsers will prevent you doing things like accidentally leaving a `var` keyword out of a loop: `for( i in foo )` -- without strict mode this will run fine, and pollute the global scope with `window.i`.  In strict mode this would throw an `undefined variable` error.
Merge pull request #1 from danielmendel/code-review

Code Review