Added  boolean not (`!`) to parser, and added corresponding test cases.

I also realized that I didn't quite do all the test cases for bitwise not (`~`), so I filled it in (there were no problems).