[js] support haxe.CallStack.exceptionStack by saving error stack on throw (closes #2854)

See #2854. I think it's better to just save call stack when throwing error instead of wrapping/unwrapping errors on JS. And it's backward-compatible. So I implemented stack saving, but only if `haxe.CallStack.exceptionStack` is actually used (with `__feature__` stuff).

As I mentioned in the original issue, I think we should refactor `haxe.CallStack` by breaking it into several platform-dependent override modules. I could do that after merging this one (if it's okay, of course).