Fix mangling issues with safari

Fixes #326 and #179

It isn't a really clean solution, but it works. The idea is to "virtually" reference the function name inside the scope. But to be able know it isn't *really* referenced, we add a `virtual` flag to `AST_SymbolRef.reference`.