BUG: query modifies the frame when you compare with `=`

Fix for #8664. The simplest way to fix this involved adding an `assignment_allowed=True` arg to the internal `eval()` function. All existing behaviour should be preserved. If adding the arg isn't okay I'm not quite sure how else to do it, as it's only once we reach the internal eval function that the expression is actually parsed and we know that it includes the assignment.

It also seems like a pretty bad side effect if query can silently overwrite values (obviously only if you accidentally include an assignment), so hopefully that's a good argument in favour of having the
`assignment_allowed` arg.