Simplify fn function
Hoist variables to make code tidy
Add array, object and function detectors
Use isFunction() to check for valid callbacks
Support key generator function in .index()
Add .tokenize() function

At the moment it's only used by .toCase(), but will be handy when
reversing .flatten().
Default toCase() type to snake_case

If type wasn't specified, it didn't return anything. Fixed so that it
falls back to snake_case if no type set.