Test that disallowing assignments actually works.
Teach the scanner about the punctuation for the assign-ish operators.
Parse the logical 'and' and 'or' operators.
Generalize how we test binary operators.

Rather than hand-writing a nearly-identical test for each binary operator,
exploit the fact that they all behave the same way and test them
mechanically.
Only allow ident and punct tokens to be interpreted as operators.

This is still a bit lazy but we assume that the ident and punct space
will never overlap and so we don't need to explicitly block such
ridiculous tokens as ("IDENT", "=") or ("not", "not").
Don't duplicate the "p_expr_binary_" prefix on the binary expr functions.
Lay the framework for unary prefix operators, and implement logical 'not'.