PERF/REF: Check use of numexpr earlier in the DataFrame operation
This PR tries to gather some checks about whether numexpr can be used or not which can be done upfront on the DataFrame level, before dispatching to the array_ops. 
For example, for a scalar right operand, we can check it only once if it's compatible with numexpr usage. Or for ArrayManager, we can check the size constraint once upfront (since each array has the same size). For those cases, this avoids overhead in `expressions.evaluate`. 

To this end, I created a new `can_use_numexpr` that starts to gather some checks (there might be more that can be added), call this up front in `DataFrame._dispatch_frame_op` (this could IMO be bit cleaner with https://github.com/pandas-dev/pandas/pull/39772, but the if/else checks inside `_dispatch_frame_op` work as well). And then the result of `can_use_numexpr` is passed through to the array_ops. 
There failing tests related to warning/error not being raised for boolean arithmetic ops, but (more easily) fixing those tests depends on https://github.com/pandas-dev/pandas/pull/41161. 
And I would also first like to see https://github.com/pandas-dev/pandas/pull/40463 merged for better test coverage. any estimates for perf impact? This pull request is stale because it has been open for thirty days with no activity. Please update or respond to this comment if you're still interested in working on this. > There failing tests related to warning/error not being raised for boolean arithmetic ops, but (more easily) fixing those tests depends on #41161.
> And I would also first like to see #40463 merged for better test coverage.

#41161 and #40463 have been merged. can you address @jbrockmendel comments. Thanks for the PR but appears to have gone stale. Closing to clear the queue, but feel free to reopen if you find the time to revisit this PR and the comments.