Implement private variables, getter/setters and methods using Symbols

Example implementation for #684 

Not for merging, only discussion.

TODO:
- Implement compiler flag.
- Use compiler flag to selectively turn on new codegen.
- Only generate __symbol declaration when the current sourceFile has any classes with private members. The currnet code always generates it.
- Tests.
- ~~Handle static and instance members with the same name.~~ Done.
I've changed it to arrow notation, but I can't remove the equality check because the result of bit-wise and is a number and some wants a callback that returns a bool.