improved parsing of unary not wrapping binary expressions

A unary not expression wrapping a binary expression was not parsed correctly:

```PAssert.IsTrue(() => !(one == 1))``` would pretty print as ```!one == 1```. This has now been addressed with a simple check on the operand type of the unary expression being parsed, resulting in a binary expression being wrapped inside parenthesis. Added two tests and verified that all earlier tests are still passing.