IE fix

Removed arguments.callee.caller.name and added explicit visibility declaration in Public Private and Protected.

Apart from the fact that arguments.callee is effectively being phased out and is completely absent in ECMAScript 5 strict mode, the main issue is that Function objects in IE do not have the name property. It is implemented in some browsers, notably Firefox and recent WebKit-based browsers, but is non-standard, and indeed there is no standardized way to get hold of a function name.

The only option this leaves you is trying to parse the name from the function's string representation, which is not a good idea.