don't rely on [function].name

`[function].name` is not available in IE10, or any other IE version.  It returns undefined.  There are various places in the code that rely upon this property:

https://gist.github.com/bitmage/c89bcd768bbc15e5d022

I've modified types.js with one potential solution: put all the types in the Types object, and use the object key as the type name.  I don't know if this approach will apply to the broader number of use cases listed above though.

I assume that we want to support this code in the browser, and that targets should include IE10.  I expect it will take a couple iterations to get this fixed and tested.  There are several approaches we might want to use:

1.  The easy route of course is to just add the name property.  While this is generally frowned on, in this case it is unlikely to cause incompatibilities, and it could be considered a 'shim/sham' to ES6.
2. [This approach](http://stackoverflow.com/a/6903860/1846335) could be used to detect the function name, without modifying any properties.
3. Use an approach similar to what I did in types.js - keeping track of the name and corresponding function in a data structure.  This will require additional code and workarounds at various places in the code base.

Would appreciate some feedback on what the preferred approach would be.

Also, are there any thoughts on porting the test base to run in a multi-browser environment such as SauceLabs?

Thoughts as to how this might apply to the rest of the StrongLoop/Loopback toolset?

Workarounds, shims that you're aware of?  I don't see any focus on this in the shims that I'm looking at.

Thanks,
Brandon
I like the caching implementation you proposed, I am not aware of any downsides.

Can you please rework this pull request to use this new approach?