add bitwise operators (&, |, ^ and ~) support

including compound assignment with binary bitwise operators (&=, |=, ^=)
Make sure that `?x (y | z)` is treated as `?{x} (y | z)` rather than `?{x(y | z)}`.
Merge branch 'alidd-bitwise-operators-support' into highlighting