made size more idiomatic

Okay, now size() works in a more functional environment.  If a valid primitive (Number or String) is passed in, it gets turned into an object so that we can use the 'keys' function.  If an invalid primitive (null, undefined, Infinity, Boolean) gets passed, it'll just return an empty array.  

If you try to use size(Number), it returns the # of digits in the Number.  Do you think this is good, or should Number be an invalid primitive too?

Let me know what you think!  I took the core concept of what you posted and kind of ran with it.